这可能是一个基本问题,但您如何找到需要与gcc链接的库?我正在尝试编译使用#include <signal.h>
的共享库,但是当我尝试使用它时,它会给我一个CAN NOT LINK EXECUTABLE,因为它无法找到任何符号。
我假设我必须使用gcc中的标志-l
专门针对库进行链接,但我不知道该库的位置/内容。
在更广泛的示例中,-ldl
与libdl.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
答案 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 -T
,nm -Dg
或eu-readelf --symbols=.dynsym
查看已定义的符号(有很多选择)。