簡體   English   中英

C ++-建立靜態庫問題

[英]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.

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