繁体   English   中英

在Linux上将共享库与gcc链接

[英]Linking shared libraries with gcc on Linux

我需要编译,最重要的是,链接一个使用共享库文件中存在的专有functionC程序。 由于缺乏与以前的开发团队的沟通,因此没有适当的文档。 我声明了一个函数原型(因为我知道参数的数量和类型):

int CustomFunction(unsigned char *in, int size);

由于可以从/customlibs/libcustom.so该函数的名称,因此我尝试编译代码并像这样链接它:

gcc -L/customlibs testing.c -o testing -lcustom

这会引发一些错误消息,如下所示:

/customlibs/libcustom.so: undefined reference to `AnotherCustomFunction'

显然,我需要告诉链接器也包括其他库,而且,更糟糕的是,它们必须按特定顺序排列。 我尝试使用-Wl,-rpath= -Wl,--no-undefined -Wl,-rpath= -Wl,--no-undefined-Wl,--start-group导出LD_LIBRARY_PATH 有没有简单的方法就可以为链接器提供所有.so文件而没有正确的顺序?

在命令行上添加它们是一种方法。 下面是这样的。 LD_LIBRARY_PATH告诉gcc在哪里寻找库,但是您仍然需要说出要包括哪些库。

gcc -L / customlibs testing.c -o testing -lcustom -lmylib1 -lmylib2 -lmylib3

您还应该通过添加gcc的-I选项来包括共享库的所有头文件,例如: gcc [...] -I/path/to/your/lib/header/files [...]

我找到了解决问题的方法(或解决方法):添加-Wl,--warn-unresolved-symbols ,将错误变为警告。 请注意,这仅在您绝对确定函数不依赖于undefined refernce to:消息中提到的符号时起作用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM