我有一個問題,聽起來令人討厭的簡單,但我覺得我已經嘗試了一切來解決它,我出來的想法。鏈接到共享助推庫令人頭痛
我有一個程序,我寫使用包括聲明其採用升壓/ 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.
我已經與報價和<>想這一點,並沒有 「升壓/」 等,但我總是得到同樣的投訴。我認爲這意味着它找到了庫,因爲沒有關於-lboost_program_options標誌的投訴?
雖然它適用於我的機器,但我可能根本沒有使用共享程序選項庫。在我的筆記本電腦上,我的庫路徑中可能使用了libboost_program_options的靜態版本,以及可能位於我的include路徑中的庫外的program_options.hpp頭。我覺得我應該能夠使用服務器上的共享庫,而不是惹惱第五次服務器管理員(事情在這裏真的很慢)。
對不起,如果這是我的疏忽。我很興奮,但我覺得現在我已經嘗試了一切來解決這個問題。
我很樂意提供任何有關如何改變這種情況的建議......或者如果我只是在使用共享庫時感到有點愚蠢。
在此先感謝。
編輯: 經過更多的研究,我覺得我只是在靜態和共享庫之間感到困惑。我試圖在編譯時鏈接一個共享庫,我認爲這沒有意義。還包括在編譯時不應該鏈接的東西的頭文件沒有什麼意義。我的代碼顯然是爲靜態庫設計的。
'g ++ -I/usr/include -L/usr/lib64 -lboost_program_options -std = C++ 11 ...' –
您的服務器可能沒有'program_options.hpp',它應該在一些名爲boost_program_options _ ** devel **的軟件包。 – Mine
是的,那是我的問題。我想我可以沒有它,但似乎並非如此。我現在只是在我的筆記本電腦上鍊接了一個靜態版本的程序選項,並使用服務器上的可執行文件。它工作到目前爲止..但我覺得我應該能夠得到這個在服務器上編譯以及。我現在已經下載了頭文件,它決定它找不到libboost_program_options.so,儘管我已經創建了一個符號鏈接到我正在運行的同一個目錄中...好玩^^ – LuckyM