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

相关推荐
Hard but lovely3 小时前
linux: udp服务器与客户端 CS 基于ipv4的地址结构体
linux·服务器·udp
leonardee3 小时前
Android和JAVA面试题相关资料
java·后端
w***4243 小时前
Spring Boot 条件注解:@ConditionalOnProperty 完全解析
java·spring boot·后端
oioihoii3 小时前
现代C++:一场静默的革命,告别“C with Classes”
c语言·jvm·c++
adnyting3 小时前
【Linux日新月异(六)】CentOS 7网络命令深度解析:从传统到现代网络管理
linux·网络·centos
q***97914 小时前
Spring Cloud GateWay搭建
java
明洞日记4 小时前
【设计模式手册007】原型模式 - 通过复制创建对象的艺术
java·设计模式·原型模式
普通网友4 小时前
C++中的组合模式
开发语言·c++·算法
java_logo4 小时前
MONGO-EXPRESS Docker 容器化部署指南
linux·运维·mongodb·docker·容器·express
江公望4 小时前
Qt QByteArray类型,10分钟讲清楚
开发语言·c++·qt