gcc -l参数出现在命令行中顺序问题导致的“undefined symbol“问题

原有的编译命令(他方提供):

shell 复制代码
gcc -shared -fpic -o libaqrng.so -I"${JAVA_HOME}/include" -I"${JAVA_HOME}/include/linux" -L. -lxtqrngop  aqrng.c

编译成功, 将生成的libaqrng.so放到/usr/lib, jni引用报错:

ldd -r查看:

最终查到的有效资料:

所以是因为-lxtqrngop这个库引用参数在使用该库的源码文件aqrng.c之前, 导致链接器认为该库是无用的并舍弃, 最终导致的"undefined symbol"问题.

修正后的编译命令:

shell 复制代码
gcc -shared -fpic  aqrng.c -o libaqrng.so -I"${JAVA_HOME}/include" -I"${JAVA_HOME}/include/linux" -L. -lxtqrngop

使用新编译的库后:

调用成功.

引用: https://www.cnblogs.com/ezrealiu/p/the-order-of_-l-option-in-gcc-command.html

相关推荐
Vallelonga几秒前
ELF 文件和 Linux 内核镜像文件
linux·经验分享
初願致夕霞5 分钟前
实现具备C++11现代特性的STL——vector篇(附带简单的航空订票系统实例)
开发语言·c++·rpc
间彧5 分钟前
Java双亲委派模型工作原理
java
zzzsde6 分钟前
【Linux】基础开发工具(4):自动化构建--make/makefile
linux·运维·服务器
云泽8086 分钟前
C++ 模板进阶全解析:非类型模板参数、模板特化与分离编译详解
开发语言·c++
smileSunshineMan6 分钟前
idea启动kafka源码
java·kafka·intellij-idea
indexsunny8 分钟前
互联网大厂Java面试实战:核心技术与微服务架构解析
java·数据库·spring boot·缓存·微服务·面试·消息队列
想用offer打牌9 分钟前
非常好用的工具: curl
java·后端·github
·云扬·10 分钟前
ClickHouse数据备份与恢复实战:从基础操作到工具应用
android·java·clickhouse
程序员清风13 分钟前
贝壳一面:Spring是怎么实现的?谈谈你的理解?
java·后端·面试