簡體   English   中英

靜態編譯SDL2程序時的問題

[英]Issues when Statically Compiling SDL2 program

我正在Windows平台(Cygwin上的gcc編譯器,在Windows 7上運行)上使用C和SDL2編寫一個簡單的Hello World類型的程序。

只要使用動態鏈接庫進行編譯,我的程序就可以正常運行,並且SDL2.dll文件與運行的程序位於同一目錄中。

但是,當我在編譯時在gcc行中添加“ -static”編譯器標志時,會出現大量“未定義引用”錯誤,例如:

undefined reference to `_imp__waveInAddBuffer@12'

誰能指出我在哪里出現問題的正確方向?

編輯:我忘記指定要使用MinGW作為我的編譯器工具鏈。

編輯:我包括工作的gcc編譯器標志(摘自下面的接受的答案,以及我自己的一些補充):

-Wl,-Bstatic -lmingw32 -lSDL2main -lSDL2 -Wl,-Bdynamic -lws2_32 -ldinput8 -ldxguid -ldxerr8 -luser32 -lgdi32 -lwinm m -limm32 -lole32 -loleaut32 -lshell32 -lversion -luuid -lcomdlg32 -lhid -lsetupapi

您的問題似乎是特定於Windows的,盡管某些事物非常相似,但其他系統上的事物可能(也可能沒有)不同。

我認為您可以在沒有cygwin1.dll依賴項的情況下使用cygwin生成可執行文件。

-static可防止鏈接程序考慮任何動態庫,而不僅僅是SDL。 Windows安裝中有很多dll(因此您可以期望它們會出現在目標系統上),但它們沒有靜態版本,並且如果程序的任何代碼使用了它們(無論是您的代碼還是在其中)情況下(SDL),則無法在此處使用-static生成可執行文件。 但是,您可以使用某些庫的靜態版本,例如SDL-它將需要具有相應的.a (或MSVC的.lib ), 指定該庫具有的所有依賴項(因為.a沒有內置依賴項信息,而動態庫)),例如對於SDL2,可能類似於

-Wl,-Bstatic SDL2main SDL2 -Wl,-Bdynamic -lws2_32 -ldinput8 -ldxguid -ldxerr8 -luser32 -lgdi32 -lwinmm -limm32 -lole32 -loleaut32 -lshell32 -lversion -luuid -lcomdlg32

-Bstatic要求鏈接器使用之后的庫的靜態版本; -Bdynamic是反向的; -Wl,...將選項傳遞給鏈接器)

如果使用mingw,則可能還需要--static-libgcc--static-libstdc++ (並且不依賴cygwin dll作為額外的獎勵)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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