簡體   English   中英

鏈接到共享的 boost 庫讓人頭疼

[英]Linking to shared boost library giving headaches

我有一個聽起來很簡單的問題,但我覺得我已經嘗試了一切來解決它,但我沒有想法。

我有一個我寫的程序,它使用包含語句使用 boost/program_options.hpp

#include <boost/program_options.hpp>

這個程序在我的筆記本電腦上運行,現在我試圖把它放到我沒有 sudo 權限的服務器上。 在我的筆記本電腦上,我有 1.56 和 1.58 的增強版,在我的服務器上我找到了 1.53.0。 我沒有安裝或構建這個。

服務器上存在的共享庫文件為:/usr/lib64/libboost_program_options.so.1.53.0

運行 ldd 給我輸出:

 ldd /usr/lib64/libboost_program_options.so.1.53.0
 linux-vdso.so.1 =>  (0x00007ffc54a63000)
 libstdc++.so.6 => /lib64/libstdc++.so.6 (0x00007fc0dcad8000)
 libm.so.6 => /lib64/libm.so.6 (0x00007fc0dc7d5000)
 libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00007fc0dc5bf000)
 libc.so.6 => /lib64/libc.so.6 (0x00007fc0dc1fe000)
 /lib64/ld-linux-x86-64.so.2 (0x00007fc0dd071000)

我認為這意味着它找到了所有依賴項。

我已經建立了一個指向我的主目錄的符號鏈接來創建一個 libboost_program_options.so 鏈接,我猜這意味着 -lboost_program_options 鏈接器標志應該可以工作。

我編譯的方式是:

g++ -L/home/homeDir code.cpp -o code.o -std=c++11 -Wall -lboost_program_options

我得到的只是:

fatal error: boost/program_options.hpp: No such file or directory
 #include "boost/program_options.hpp"
                                     ^
compilation terminated.

我已經用引號和 <> 嘗試過這個,沒有“boost/”等,但我總是得到同樣的抱怨。 我認為這意味着它找到了庫,因為對 -lboost_program_options 標志沒有任何抱怨?

雖然它在我的機器上工作,但我可能根本沒有使用共享程序選項庫。 在我的筆記本電腦上,我的庫路徑中既有靜態版本的 libboost_program_options 可能正在使用,也有庫外的 program_options.hpp 標頭,它可能在我的包含路徑中。 我覺得我應該能夠使用服務器上的共享庫,而不是第 5 次惹惱服務器管理員(這些東西在這里工作真的很慢)。

如果這是我的疏忽,我很抱歉。 我對提升還很陌生,但我覺得我現在已經嘗試了一切來解決這個問題。

我很樂意就如何改變這一點提出任何建議......或者如果我只是在使用共享庫時有點愚蠢。

提前致謝。

編輯:經過更多研究,我覺得我只是在靜態庫和共享庫之間感到困惑。 我試圖在編譯時鏈接一個共享庫,我想這沒有意義。 還包括在編譯時不應該鏈接的頭文件是沒有意義的。 我的代碼顯然是為靜態庫設計的。

錯誤消息是由未找到 Boost 頭文件的預編譯器生成的(如錯誤消息中所述)。 您需要在找到 Boost 庫頭文件的位置設置正確的包含路徑( -I... ),顯然它們不在/usr/include

必須相應地指定 Boost 庫 ( -L... ) 的路徑。

最后:如果您要鏈接系統上的 Boost 共享庫,那么您應該使用與服務器上安裝的 Boost 版本相同的版本。 否則,鏈接靜態庫,這可能會使您的可執行文件更大,但它會在任何服務器上運行,無論那里安裝的 Boost 版本如何(甚至沒有)。

sudo apt install libboost-program-options-dev

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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