[英]Shared library, makefile. Library path
我試圖將我的程序鏈接到共享庫。 我使用makefile進行編譯。 它看起來像這樣:`
make: sms_out.cpp SMSDispatch.cpp SMSDispatch.h
g++ -c -fPIC SMSDispatch.cpp -o SMSDispatch.o
g++ -shared SMSDispatch.o -o libSMSDispatch.so
` g++ sms_out.cpp -L. -lSMSDispatch -o sms_out
如果我在命令窗口中運行程序,它可以正常工作:
LD_LIBRARY_PATH="." ./sms_out
但我想用./sms_out
運行它,有人可以幫助我嗎? 試圖添加export LD_LIBRARY_PATH=.
到makefile,但是沒有用,只是在我嘗試運行程序時得到錯誤“加載共享庫時出錯:libSMSDispatch.so:無法打開共享對象文件:沒有這樣的文件或目錄”。
另一個選項 - 為鏈接器提供-rpath選項,以通知二進制文件在哪里搜索動態對象。
g++ -Wl,-rpath=<path to .so> -o <your binary here> <cpp file name>.cpp
將.so
文件所在的目錄添加到LD_LIBRARY_PATH
:
$ export LD_LIBRARY_PATH=/dir/containing/sharedobject
您可能會發現有用的實用程序是ldd
,它打印共享庫依賴項。 例如:
$ ldd /bin/ls linux-vdso.so.1 => (0x00007fff819ff000) librt.so.1 => /lib64/librt.so.1 (0x00007fc0d3f67000) libselinux.so.1 => /lib64/libselinux.so.1 (0x00007fc0d3d4a000) libacl.so.1 => /lib64/libacl.so.1 (0x00007fc0d3b42000) libc.so.6 => /lib64/libc.so.6 (0x00007fc0d37e9000) libpthread.so.0 => /lib64/libpthread.so.0 (0x00007fc0d35cd000) /lib64/ld-linux-x86-64.so.2 (0x00007fc0d4170000) libdl.so.2 => /lib64/libdl.so.2 (0x00007fc0d33c9000) libattr.so.1 => /lib64/libattr.so.1 (0x00007fc0d31c4000)
如果共享對象不可定位,則顯示未找到的字符串或類似字符串,而不是顯示正在使用的共享對象的路徑。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.