我正在尝试使用cmake构建应用程序,但是可执行文件无法链接到库,我的可执行文件的ldd看起来像这样
def editMenu(request):
db=credentials().database()
mType = request['Menu_Type']
rID=request['rID']
iID =request['iID']
print(request)
request.pop("Menu_Type")
request.pop('rID')
request.pop('iID')
return db.child('Restaurants').child(rID).child("Menu").child(mType).child(iID).update(request)
在执行--trace时,库已存在
linux-vdso.so.1 (0x00007ffd447a0000)
libavcodec.so.58 => /usr/local/ffmpeg/libavcodec.so.58 (0x00007f5673121000)
libavformat.so.58 => /usr/local/ffmpeg/libavformat.so.58 (0x00007f5672cdb000)
libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f5671ffb000)
libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f5671de3000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f56719f2000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f5671654000)
/lib64/ld-linux-x86-64.so.2 (0x00007f567629b000)
libswresample.so.3 => not found
libavutil.so.56 => not found
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f5671435000)
libavutil.so.56 => not found
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f5671231000)
即使 libswresample.so.3,libavutil.so.56 明显存在于make --trace出于某些原因应用程序未链接至该文件,另外,如果我将/我的LD_LIBRARY_PATH中的usr / local / ffmpeg文件夹一切正常。此外,找到了 libavcodec.so.58 。试图了解正在发生的事情以及如何解决它。谢谢。
答案 0 :(得分:0)
通过链接这些库,您可以在二进制文件中根据需要标记它们,而无需记录任何路径。
默认情况下,系统仅在少数位置查找动态库。 您有几种选择:
/usr/local/ffmpeg
添加到/etc/ld.so.conf.d/
中的文件中(不要忘记调用ldconfig
)。这将告诉您的动态链接器(ld.so
)在那里。/usr/local/ffmpeg
添加到LD_LIBRARY_PATH
环境变量中。您可以通过在某些计算机上编辑/etc/environment
来使其永久化。这具有相同的效果,但是可以被用户覆盖。例如,大多数Linux上的游戏都依赖此工具来查找捆绑的库,但这确实需要启动器脚本。-rpath=/usr/local/ffmpeg
链接。这将通知动态链接器您也希望它也在那里。您可以通过设置INSTALL_RPATH
目标属性在CMake中完成此操作。您可能还希望设置BUILD_WITH_INSTALL_RPATH
,因此在开发过程中不必设置LD_LIBRARY_PATH
或设置单独的BUILD_RPATH
。