【发布时间】:2020-07-25 03:55:29
【问题描述】:
我的情况如下:我需要构建一个库,在其中导出“包装”strcpy(请忽略这对我有什么用处),它唯一要做的就是调用标准(来自string.h ) strcpy 但返回 void,而不是返回 char *。这意味着,我需要#include string.h 但这会立即给我strcpy 和gcc 不会让我按照我的意愿重新定义它,并构建一个.so 共享库,只导出新的,包装的@ 987654330@。我怎样才能做到这一点?
【问题讨论】:
-
用户不需要使用来自
strcpy的返回值。如果他忽略它,则行为相当于一个 void 返回值。 -
@PaulOgilvie 事情更复杂,最好忽略我为什么这样做。事实上,我使用的是强类型的 Haskell FFI,此外,我还想以更复杂的方式包装其他函数,而不是简单地忽略它们的返回值。
-
这句话可能不是真的:“我需要建立一个库,在其中导出一个“包装”
strcpy...”是什么让你相信你有这样的需求,尤其是它需要与 Cstrcpy同名但类型不同? -
@EricPostpischil 这是一个供内部使用的库,用于我的编译器(用另一种语言,Haskell 编写),而不是公共的。我在这里只对如何完成这个特殊的符号导出属性感兴趣,而不是我如何/为什么需要这个......那将是另一个话题......
-
也许 GCC 可以让我静态链接并使旧的
strcpy消失?然后,以某种方式允许我将符号函数“重命名”为另一个名称(因为显然在 C 中你不能有两个具有相同标识符、相同参数的不同函数,即没有重载)。 gcc 有这样的选择吗?
标签: c++ c gcc shared-libraries