我正在使用C++和Qt Creator進行編程。我需要在我的項目文件夾中包含我正在使用的庫,以便程序可以在任何設備上實現。我應該怎麼做?將庫包含到我的項目文件夾中
我知道我應該修改.pro
文件,我已經嘗試過這樣的:
LIBS+=-L"$$_PRO_FILE_PWD_/libs" \
-lvl \
但它不工作。我得到這個錯誤: 加載共享庫時出錯:libvl.so:無法打開共享對象文件:沒有這樣的文件或目錄
任何想法?? 謝謝
我正在使用C++和Qt Creator進行編程。我需要在我的項目文件夾中包含我正在使用的庫,以便程序可以在任何設備上實現。我應該怎麼做?將庫包含到我的項目文件夾中
我知道我應該修改.pro
文件,我已經嘗試過這樣的:
LIBS+=-L"$$_PRO_FILE_PWD_/libs" \
-lvl \
但它不工作。我得到這個錯誤: 加載共享庫時出錯:libvl.so:無法打開共享對象文件:沒有這樣的文件或目錄
任何想法?? 謝謝
首先,在Linux上,qmake生成用於控制構建過程的Makefiles。當您添加行
LIBS+=-L"$$_PRO_FILE_PWD_/libs" -lvl
您.pro
文件,qmake可以看到它,適當的Makefile文件的目標是產生它告訴鏈接器$$_PRO_FILE_PWD_/libs
並鏈接到搜索其他庫庫libvl.so
時鏈接的可執行文件。
但是,您遇到的是運行時問題。更具體地說,ld-linux.so.2
將嘗試查找並動態加載共享庫,如libvl.so
,在運行時。這發生在使用內置的加載可執行文件時,如/usr/lib
和用戶定義(和/或分佈定義)的路徑。關於ld-linux.so.2
和man page,ldconfig
,我將其引用到相應的man page,其中ldconfig
用於以標準方式配置用戶定義的庫搜索路徑。
當ld-linux.so.2
試圖找到庫,它搜索良好定義的組目錄(所有冒號分隔)按以下順序:
DT_RPATH
,其可以被寫入到一個可執行庫(已棄用)。LD_LIBRARY_PATH
(至少對於大多數可執行文件,看到異常的man page)DT_RPATH
(如果有的話),但延遲的查找之後才LD_LIBRARY_PATH
已被處理DT_RUNPATH
。 RPATH
和RUNPATH
可用於模擬Windows上的行爲,其中也搜索可執行文件的路徑。然而,LD_LIBRARy_PATH
更適合於此目的。/etc/ld.so.conf/
以及可能的附加文件中指定ldconfig
使用目錄生成的高速緩存文件/etc/ld.so.cache
庫名稱或者通過包含直接提及的ld.so.conf
或另有規定/lib
和/usr/lib
如果上面提到的路徑都不包含適當的共享對象,您將收到一個錯誤消息,說明它不能被ld-linux.so.2
加載。
你的情況的解決方案是簡單又進來一些品種:
export LD_LIBRARY_PATH={yourSearchPaths}
的LD_LIBRARY_PATH
環境變量。LD_LIBRARY_PATH
添加到命令行上對可執行文件的調用,例如, LD_LIBRARY_PATH={yourSearchPaths} ./{executable}
start.sh
,它爲你做了上面的事情,然後簡單地執行shell腳本./start.sh
與沒有評論的人一起投票是什麼? – thokra
@ thokra ..感謝這麼多的詳細解釋..我改變了.pro文件中的行爲:'LIBS + = - L「$$ PWD/libs」-lvl「,它沒有工作..我試了整個項目在另一個設備..這裏是驚喜..它完美的作品..即使一切都是相同的兩個設備..可能只是QT Creator版本是不同的..多謝你這麼多:) – triple13
@ triple13:什麼你的意思是用* device *?另外,QtCreator簡單地解析相應的IDE中的'.pro'文件。 QtCreator不會在構建時或運行時貢獻(除了啓動可執行文件和可能指定的工作目錄之外)。 – thokra
究竟是什麼問題?編譯器沒有找到庫?如果'lvl'是一個庫,則需要添加一個'-l'前綴來實際將它添加到要鏈接的庫的列表中。 – thokra
它給出了這個錯誤:加載共享庫時出現的錯誤: :libvl.so:無法打開共享對象文件:沒有這樣的文件或目錄 – triple13
@thokra是的我已經把它作爲-lvl在我的程序中,但是當我複製粘貼到論壇 - 已經過去了:D – triple13