[英]C++ - building static library question
我使用MinGW(GCC 4.5.0)編譯系統構建了libbz2
(靜態變體) ,現在嘗試將該庫導入到我的MSVS2008項目中。
我已經做完了這些事情,並且一切都很好,例如,使用zlib
(這意味着創建的C庫實際上是可互換的)。
但是,在使用libbz2
進行相同libbz2
,我遇到了一些未知的麻煩-編譯MSVS2008-project時,在鏈接階段會收到以下錯誤:
unresolved external symbol ___chkstk referenced in function _bzopen_or_bzdopen
我不知道為什么會這樣(我認為是因為某些基本的C運行時不完全兼容),但也許有人知道如何解決這種錯誤?
也許有一種手動方法可以將基於MinGW的___chkstk
的實現合並到libbz2
靜態庫中?
謝謝。
謝謝大家,我找到了答案。
基本上,您可以簡單地鏈接到構建庫時使用的libgcc.a / libgcc.lib
。
處理___chkstk
問題的更方便的方法僅意味着執行類似ar x libgcc.a
(會生成許多.o文件)的操作,然后將libbz2
對象文件與__chkstk.o
文件合並。
我讀了您的答案,但我認為有一種更簡單的(自動)方式來手動合並目標文件:使用CFLAG -static-libgcc
,它將鏈接必要的功能(您正在描述和手動執行的功能)。
我認為它應該在鏈接器選項中,例如LDFLAGS = -static ,而LDFLAGS = -static-libgcc仍然提供動態鏈接的二進制文件...以及任何test.c:
gcc -c test.c
gcc -static-libgcc test.o
ldd a.out
libc.so.6 => /lib64/libc.so.6
/lib64/ld-linux-x86-64.so.2
gcc -c test.c
gcc -static test.o
ldd a.out
not a dynamic executable
對於圖書館員,只需使用ar
ar q libtest.a <path>/libgcc.a
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.