簡體   English   中英

共享庫,makefile。圖書館路徑

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM