c++ - 强制 GCC 通知共享库中 undefined reference

标签 c++ shared-libraries dynamic-linking

我有一个与另一个(第三方)共享库链接的共享库。然后在我的应用程序中使用 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/

相关文章:

c++ - 如何将概念用作模板参数?

c - configure --disable-shared 是否适用于 tcl 8.6.3?需要静态libtcl8.6.a

shared-libraries - 如何在 SConstruct 中包含共享库?

c++ - 如何从exe文件名中查找窗口句柄

c++ - QT:从 QLineEdit 到不同类的 QLabel 的简单文本

c++ - 如何创建可以使用字符串参数自动初始化其他类的类

c - 构建 C 动态共享库给出 undefined symbol

linux - 为什么 linux 不在同一文件夹中搜索共享库

c++ - 强制 GCC 通知共享库中 undefined reference

linux - 为什么编辑.fini_array不会改变程序的过程?