我有一个与另一个(第三方)共享库链接的共享库。然后在我的应用程序中使用 dlopen 加载我的共享库。所有这一切工作正常(假设文件在正确的路径等)。
现在的问题是,当我链接我的库时,我什至不需要指定链接到第三方共享库。 GCC 接受它而不报告有关 undefined reference 的错误。所以,问题; 如何强制 GCC 通知我 undefined reference ?
如果我将我的库更改为(临时)可执行文件,我会得到 undefined reference (当不向链接器提供库时)。 (如果我指定它就可以正常工作。)
即完成以下操作:
g++ -fPIC -shared -o libb.so b.o
g++ -fPIC -shared -o liba.so a.o
g++ -o a.exe a.cpp
第二行没有给出错误,第三行提示 undefined reference 。
示例代码:
嗯:
class a
{
public:
void foobar();
};
a.cpp:
#include "a.h"
#include "b.h"
void a::foobar()
{
b myB;
myB.foobar();
}
int main()
{
a myA; myA.foobar();
}
b.h:
class b
{
public:
void foobar();
};
b.cpp:
#include "b.h"
void b::foobar()
{
}
最佳答案
-Wl,--no-undefined
链接器选项可以在构建共享库时使用, undefined symbol 将显示为链接器错误。
g++ -shared -Wl,-soname,libmylib.so.5 -Wl,--no-undefined \
-o libmylib.so.1.1 mylib.o -lthirdpartylib
关于c++ - 强制 GCC 通知共享库中 undefined reference ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57158305/