我在Linux,GCC中使用Boost庫。在安裝和構建Boost之後,我發現使用Regex和Thread的程序使用共享的Boost庫。爲了我的目的,我需要靜態鏈接。 如何更改鏈接類型?我應該重建Boost,還是我可以通過在我自己的項目或Boost配置文件中定義一些常量來設置鏈接類型?加速靜態鏈接
Q
加速靜態鏈接
10
A
回答
17
只需將-static
添加到您的構建調用中即可。下面是一個簡單的例子會話:
$ cat boost_formatted_time.cpp
#include <iostream>
#include <boost/date_time/posix_time/posix_time.hpp>
#include <boost/date_time/posix_time/posix_time_io.hpp>
using namespace boost::posix_time;
using namespace std;
int main(int argc, char **argv) {
time_facet *facet = new time_facet("%d-%b-%Y %H:%M:%S");
cout.imbue(locale(cout.getloc(), facet));
cout << second_clock::local_time() << endl;
}
$ g++ -o /tmp/bft_dyn boost_formatted_time.cpp -lboost_date_time
$ g++ -static -o /tmp/bft_stc boost_formatted_time.cpp -lboost_date_time
$ ls -lh /tmp/bft_*
-rwxr-xr-x 1 edd edd 216K 2010-02-24 12:34 /tmp/bft_dyn
-rwxr-xr-x 1 edd edd 1.5M 2010-02-24 12:34 /tmp/bft_stc
$ /tmp/bft_dyn
24-Feb-2010 12:34:55
$ /tmp/bft_stc
24-Feb-2010 12:34:59
$
注意靜態二進制是如何1.5MB,而不是216KB的動態鏈接的變體。 所有使用默認Boost軟件包進行的Debian測試都已完成。
0
向鏈接器指定-Lpath/to/library/
。
+0
我對項目構建和庫路徑沒有任何問題,我只需要更改鏈接類型:從動態到靜態。 – 2010-02-24 18:39:42
+6
這是不正確的 - 你需要'-static'。 '-L'給出庫的位置,但不是鏈接類型。看到我的答案全部會議。 – 2010-02-24 18:40:19
相關問題
- 1. 建設加速的靜態鏈接(MinGW的)
- 2. 動態鏈接到靜態鏈接?
- 3. import =動態鏈接? &include =靜態鏈接?
- 4. 靜態鏈接庫
- 5. 鏈接靜態stdlib.so
- 6. 靜態鏈接glib2
- 7. gcc靜態鏈接
- 8. 靜態鏈接OpenCV
- 9. pthread靜態鏈接
- 10. 靜態鏈接libwinpthread
- 11. 鏈接靜態庫與靜態庫
- 12. UNIX:靜態庫鏈接到靜態庫
- 13. Visual Studio:靜態鏈接到靜態庫
- 14. 鏈接到鏈接到靜態.lib的靜態.lib的問題
- 15. 鏈接到與CMake和VS2010靜態加速lib中沒有自動連接
- 16. Angular的深層鏈接 - 動態鏈接vs靜態鏈接
- 17. 替換php鏈接到靜態鏈接
- 18. 靜態庫鏈接兩次
- 19. Numpy和靜態鏈接
- 20. 靜態鏈接openssl到sqlcipher
- 21. 在C中靜態鏈接#
- 22. Libc的靜態鏈接
- 23. 靜態鏈接反對LAPACK
- 24. OpenJDK和靜態鏈接
- 25. CMake靜態鏈接Qt5
- 26. C靜態鏈接庫嗎?
- 27. 靜態鏈接musl與ghc
- 28. 靜態鏈接OpenCV 2.4.3.2
- 29. 的Python 3.3靜態鏈接
- 30. 靜態鏈接優勢
我不從命令行運行gcc,我正在使用Eclipse CDT。可能的靜態開關可以從項目設置傳遞給鏈接器,我會試着找到這種方式。謝謝。 – 2010-02-24 18:45:45
當包含多個庫時,「-static」是否對所有庫都有影響? – mrgloom 2016-05-27 17:34:29