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

相关推荐
Lanthanesthai.5 分钟前
Ubuntu20.04安装ROS1
linux·ubuntu
adwish11 分钟前
java基础知识(常用类)
java·开发语言
猫猫不是喵喵.20 分钟前
【Linux】Linux入门实操——rpm与yum
linux·运维·服务器
盼海1 小时前
排序算法(六)--堆排序
java·算法·排序算法
凭君语未可1 小时前
豆包MarsCode算法题:三数之和问题
java·算法
kirito学长-Java1 小时前
springboot/ssm考试系统Java学生在线考试系统web学习论坛源码
java·spring boot·学习
帅气的花泽类1 小时前
error Unexpected ‘debugger‘ statement no-debugger
java·maven
yyycqupt1 小时前
数据库连接池(二)
linux·数据库·c++·后端·单例模式
cooldream20091 小时前
SpringMVC 执行流程详解
java·spring·springmvc
redemption_21 小时前
SpringMVC-01-回顾MVC
java