使用-Wl时,符号查找错误, - defsym GCC选项

时间:2016-03-11 19:55:13

标签: c++ gcc linker g++

我有一个关于使用其中一个GCC链接器选项的问题:-Wl, - defsym。

前段时间我决定用C ++重写我的一个项目,但没有使用它的标准库,甚至没有链接到它(我使用C ++编译器将.cpp源文件编译成目标文件,但我使用C编译器链接它们)。

为此,我使用了以下编译器标志:

-fno-exceptions -fno-rtti -nostdlib -nodefaultlibs

以下链接器选项:

-Wl,--defsym -Wl,__cxa_pure_virtual=0

使用这些标志我得到了我的共享库编译和链接。 但是在我尝试在一些简单的程序中使用我的共享库(也使用上面的标志编译和链接)后,我在运行时遇到以下错误:

examples/bin/blink: symbol lookup error: examples/bin/libblink.so: undefined symbol: __cxa_pure_virtual

其中blink是可执行文件的名称,libblink.so是我的共享库的名称。

我试图修复它,它看起来像用这个函数替换--Wl, - defsym链接器标志(对于可执行文件和库):

extern "C" void __cxa_pure_virtual
{
    while (true);
}

完成这项工作。为什么--Wl, - defsym在这种情况下不起作用? 我还想提一下,我在Windows下对它进行了测试,它在那里工作正常。

1 个答案:

答案 0 :(得分:0)

我认为我已经找到了问题的答案。

将符号地址从0更改为任何其他值可修复我的问题。 所以没有:

--Wl,--defsym --Wl,__cxa_pure_virtual=0

我有:

--Wl,--defsym --Wl,__cxa_pure_virtual=1

这样运行时链接程序不会查找符号(我认为当地址设置为0时就是这种情况)。