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

相关推荐
凛_Lin~~11 小时前
安卓 Java线程八股文 (线程、多线程、线程池、线程安全)
android·java·开发语言
哈哈哈笑什么11 小时前
企业级CompletableFuture并行化完整方案,接口从10s到100ms
java·后端·spring cloud
C雨后彩虹11 小时前
最少交换次数
java·数据结构·算法·华为·面试
Evan芙11 小时前
用Shell脚本破解经典鸡兔同笼问题
linux·运维·网络
i***118611 小时前
【MyBatisPlus】MyBatisPlus介绍与使用
java
-森屿安年-11 小时前
二叉平衡树的实现
开发语言·数据结构·c++
kesifan12 小时前
JAVA的线程的周期及调度
java·开发语言
李少兄12 小时前
解决 Spring Boot 中 YAML 配置文件的 `ArrayIndexOutOfBoundsException: -1` 异常
java·spring boot·后端
Q741_14712 小时前
C++ 高精度计算的讲解 模拟 力扣67.二进制求和 题解 每日一题
c++·算法·leetcode·高精度·模拟
uup12 小时前
Java 多线程环境下的资源竞争与死锁问题
java