今天发现程序崩溃,查了一下,找的是系统库,而不是我的库。难道rpath失效?先说一下调用关系:
执行文件A,库B,库C。库C跟系统重名。
检查了一下文件,路径正确:readelf -d run
后来研究发现,两台机器的编译器不同导致的:
一个编译器自动把自己相关库加上,包括库C。
另外一个不指明就不加。执行程序指明了rpath,可是不需要;到了库B,加载时又没有rpath,于是就调用了系统库。
相应的,解决办法有两个:
编译执行A时把库链上。
编译库B时加上rpath。
今天发现程序崩溃,查了一下,找的是系统库,而不是我的库。难道rpath失效?先说一下调用关系:
执行文件A,库B,库C。库C跟系统重名。
检查了一下文件,路径正确:readelf -d run
后来研究发现,两台机器的编译器不同导致的:
一个编译器自动把自己相关库加上,包括库C。
另外一个不指明就不加。执行程序指明了rpath,可是不需要;到了库B,加载时又没有rpath,于是就调用了系统库。
相应的,解决办法有两个:
编译执行A时把库链上。
编译库B时加上rpath。