将特定库与gcc链接

时间:2017-11-17 19:37:24

标签: c gcc linker

这可能是一个基本问题,但您如何找到需要与gcc链接的库?我正在尝试编译使用#include <signal.h>的共享库,但是当我尝试使用它时,它会给我一个CAN NOT LINK EXECUTABLE,因为它无法找到任何符号。 我假设我必须使用gcc中的标志-l专门针对库进行链接,但我不知道该库的位置/内容。

在更广泛的示例中,-ldllibdl.so相关联,-l我可以使用#include <signal.h>来链接soinfo_link_image(linker.cpp:1617): could not load library "mylib.so" needed by "/bin/test"; cause by soinfo_relocate(linker.cpp:975): cannot locate symbol "signal" referenced by "mylib.so"...CANNOT LINK EXECUTABLE

编辑:

gcc -fPIC -c -g -o mylib.o mylib.c  
gcc -shared -o mylib.so mylib.o -ldl

使用编译:

try {
        DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
        DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();          
        Document doc = dBuilder.parse(new InputSource(new StringReader("myfile.xml"))); // ERROR OCCURS HERE

1 个答案:

答案 0 :(得分:0)

这更像是一个链接器问题,而不是GCC问题。通常,库文档中提到了库名。在GNU / Linux发行版上,许多库都有pkg-config.pc个文件。如果没有,您可以使用

等命令
dpkg -S /usr/include/signal.h

rpm -qf /usr/include/signal.h

找到提供头文件的-dev / -devel个包,然后继续查看

dpkg -L libc6-dev

rpm -ql glibc-devel

输出以确定用于链接的.so文件的名称。可以使用objdump -Tnm -Dgeu-readelf --symbols=.dynsym查看已定义的符号(有很多选择)。