我有一个lib1.lib,它有函数fun1(),它显示我做nm时的定义。 我已经从my.lib创建了my.so。但是当我搜索my.so时,那个fun1()根本不存在。因为可能没有调用者编译器可能会忽略它。 所以我创建了一些虚拟数组,如
char* dummyArray={
&fun1;
};
在定义fun1()的文件中。 但这也行不通。 请帮助。
答案 0 :(得分:1)
您需要强制编译器和链接器从库中获取函数。在您当前的尝试中,您在程序中引用了一个名为fun1
的角色。因为fun1
是char,所以编译器没有理由在.o文件中声明一个名为fun1
的函数的符号。因此,函数fun1
将不会从库中获取,并且您的可执行文件中没有函数fun1
。
(请注意,在您的示例中,没有声明char fun1
,因此您的编译器应该抱怨。您是否发出警告???)
要强制编译器和链接器从库中加载函数fun1
,您可以写:
char *fun1(void); // prototype;
char *(*p)(void) // p is a pointer to a function with same signature as fun1...
= fun1; // and we initialize it with function 'fun1'
注意:如果编译器确定您从不使用p
,它仍然可以删除函数指针变量并为其分配fun1
,因此fun1
仍然不会加载。
答案 1 :(得分:1)
直接换行
bool sameSign = ((n1 < 0) == (n2 < 0));
链接时的.so。有关背景信息,请参阅c-differ-between-linking-with-o-and-with-a-file-different-behavior-why