沈天真
作者沈天真·2021-10-26 21:48
售前支持·IPS

AIX 7.2 上使用GNU C/C++编译时无法找到库文件问题解决

字数 714阅读 2760评论 0赞 1

最近和ISV合作,迁移其应用,在编译生成一个可执行文件时,始终提示无法找到依赖的库文件。

按照顺序,首先编译生成 liblicense.so ,然后再链接 liblicense.so,编译生成 gethostid 的可执行文件。

按照make的输出,可以看到 liblicense.so 已经正确生成,在系统中也可以直接查看到。但是接下来却始终报错”cannot find or open library file :-l license”。

通过查看相关资料,发现文档 https://developer.ibm.com/articles/au-gnu/ 描述说在AIX上使用 GNU C/C++ 进行编译时,需要使用 -brtl 选项,这样在链接时,链接器会同时去寻找后缀为 .a 和 .so 的库文件,在Linux上也被称为静态库文件和动态库文件。如果没有使用 -brtl 选项,链接器则只会寻找后缀为 .a 的库文件。

ISV的工程师说最开始在makefile里面使用了 -brtl 选项,但是提示”无法识别的编译选项”,于是又将其去掉了。自己试验了一下,确实如此。

但是怀疑这个问题和此类似,可能链接器默认只去寻找了 .a 为后缀的库文件,于是用命令“cp liblicense.so liblicense.a”手工拷贝了一个后缀为 .a 的文件,再次编译,没有再报找不到liblicense库文件的错误,成功生成了 gethostid 的可执行文件。

总结一下,在 AIX 7.2上安装最新的 GNU C/C++ 编译器后,makefile已经不支持 -brtl 编译选项,可以通过手工拷贝的方式生成需要的 .a 后缀的库文件。

如果觉得我的文章对您有用,请点赞。您的支持将鼓励我继续创作!

1

添加新评论0 条评论

Ctrl+Enter 发表

作者其他文章

相关文章

相关问题

相关资料

X社区推广