【发布时间】:2016-12-29 09:13:57
【问题描述】:
我有一个 lib1.lib,它具有函数 fun1(),它显示在我执行 nm 时已定义。 我从 my.lib 创建了 my.so。但是当我搜索 my.so 时,那个 fun1() 根本不存在。因为可能没有调用者,编译器可能会忽略它。 所以我创建了一些虚拟数组,比如
char* dummyArray={
&fun1;
};
在定义 fun1() 的文件中。 但这也行不通。 请帮忙。
【问题讨论】:
-
在您的示例中,
fun1是 [pointer to a] char,而不是指向函数的指针。此标识符不会与库中的标识符发生冲突。但是编译器会报错fun1未定义,所以请开启编译器警告。 -
当我在 lib1.lib 上执行 nm 时,我可以看到符号已定义,但为什么当我生成 .so 时符号根本不存在??
-
因为你不使用一个名为
fun1的函数(你只使用一个名为fun1的char),链接器不会获取库中的函数。 -
将尝试与 void* 相同
-
@PaulOgilvie 由于名称修改,该类型仅在 C++ 的情况下才相关(我怀疑这是 OP 的问题)。