使用 wxWidgets(3.0.2) 作为静态构建时出现许多未定义的引用错误

A lot of undefined reference errors when using wxWidgets(3.0.2) as static build

提问人:Marius 提问时间:6/12/2015 最后编辑:Marius 更新时间:2/12/2018 访问量:2071

问:

我看到很多关于这个的帖子,但没有人帮助我...... 我的问题是我想使用静态构建,这样我就可以在没有其他文件的情况下执行项目的编译 exe......

我使用以下命令编译了wxWidgets:

mingw32-make -f makefile.gcc -j4 SHARED=0 MONOLITHIC=1 UNICODE=1 BUILD=release clean
mingw32-make -f makefile.gcc -j4 SHARED=0 MONOLITHIC=1 UNICODE=1 BUILD=release

但是当我在 CodeBlocks 中使用构建时,我收到了很多未定义的引用错误

与完整错误列表的链接:http://pastebin.com/2Ccs9nDu

在 Codeblocks 中,它使用以下命令进行编译:

mingw32-g++.exe -LD:\wxWidgets-3.0.2\lib\gcc_lib -o bin\Release\Test.exe obj\Release\TestApp.o obj\Release\Test.o obj\Release\resource.res -s -mthreads  -lwxmsw30u -lwxpng -lwxjpeg -lwxtiff -lwxzlib -lkernel32 -luser32 -lgdi32 -lwinspool -lcomdlg32 -ladvapi32 -lshell32 -lole32 -loleaut32 -luuid -lcomctl32 -lwsock32 -lodbc32 -mwindows

这些是喜欢的库:

        <Add option="-mthreads" />
        <Add library="libkernel32.a" />
        <Add library="libuser32.a" />
        <Add library="libgdi32.a" />
        <Add library="libwinspool.a" />
        <Add library="libcomdlg32.a" />
        <Add library="libadvapi32.a" />
        <Add library="libshell32.a" />
        <Add library="libole32.a" />
        <Add library="liboleaut32.a" />
        <Add library="libuuid.a" />
        <Add library="libcomctl32.a" />
        <Add library="libwsock32.a" />
        <Add library="libodbc32.a" />

谁能帮我?我对此感到非常兴奋,但我仍然不知道如何在代码块中解决这个问题。 对不起,如果我错过了一些重要的部分。可悲的是,我对这个话题知之甚少,因为我刚刚开始使用它。

附言: 非静态构建对我有用,只有静态制造麻烦......

缴费灵: 我不认为这是帖子的重复......我没有从链接的页面中得到解决方案......请再次打开这篇文章..

编辑: 以下是 wxWidgets 库的链接器:

            <Linker>
                <Add option="-s" />
                <Add library="libwxmsw30u.a" />
                <Add library="libwxpng.a" />
                <Add library="libwxjpeg.a" />
                <Add library="libwxtiff.a" />
                <Add library="libwxzlib.a" />
                <Add directory="D:/Project/wxWidgets-3.0.2/lib/gcc_lib" />
            </Linker>

编辑: 这就是Code::Blocks编译我的项目的方式

mingw32-g++.exe -LD:\Project\wxWidgets-3.0.2\lib\gcc_lib -o bin\Release\static_Test.exe  
obj\Release\static_TestApp.o obj\Release\static_TestMain.o obj\Release\resource.res 
-s -mthreads  -lwxmsw30u_core -lwxbase30u -lwxpng -lwxzlib -lkernel32 -luser32 
-lgdi32 -lwinspool -lcomdlg32 -ladvapi32 -lshell32 -lole32 -loleaut32 -luuid -lcomctl32 
-lwsock32 -lodbc32 -mwindows
C++ 编译 static-libraries wxwidgets undefined-reference

评论

0赞 Marius 6/12/2015
@Ravenspoint:谢谢你的回答。我以为它也应该是重复的。发布的链接中没有任何内容对我有用......
0赞 ravenspoint 6/12/2015
“<Add directory=”D:/Project/wx/lib/gcc_lib“ />” 这是动态库,而不是静态库。

答:

0赞 ravenspoint 6/12/2015 #1

您需要告诉链接器在构建静态库的文件夹中搜索静态库 - 类似于 ...\wxWidgets-3.0.1\gcc_static_lib。

所以改变

mingw32-g++.exe -LD:\wxWidgets-3.0.2\wx\lib\gcc_lib

mingw32-g++.exe -LD:\wxWidgets-3.0.2\wx\gcc_static_lib

最简单的方法是设置一个全局变量。你知道如何使用这个code::blocks功能吗?

enter image description here

enter image description here

评论

0赞 Marius 6/12/2015
问题是,我什至没有我的项目构建选项的静态选项......我只有版本。?
0赞 Marius 6/12/2015
对不起,我忘记了帖子中的 wxWidgets 库。我在最后添加了它们。它们应该已经链接了。.
0赞 Marius 6/12/2015
我在 wxWidgets-3.0.2\wx\lib 下只有两个文件夹,这是“gcc_lib”和“watcom”。“gcc_lib”应该是静态的。我那里没有另一个库..
0赞 ravenspoint 6/12/2015
在这种情况下,您的静态库构建出了问题。
0赞 Marius 6/12/2015
是的,但是什么?我现在尝试了 5-10 次......您知道“SHARED=0 MONOLITIC=1 BUILD=release”是否是构建静态发布版本的正确标志吗?
0赞 Mahdi Khalili 2/12/2018 #2
g++ `wx-config --cxxflags` -I/usr/lib/x86_64-linux-gnu/wx/include/gtk2-unicode-3.0/ -I/usr/include/wx-3.0 -D_File_OFFSET_BITS=64 -DWXUSINGDLL -D__WXGTK__ -pthread -Wall -g -c mycode.cpp  -o mycode.o `wx-config --libs`

在 Linux 中使用此控制台命令编译代码,将 mycode.cpp 更改为主文件,将 mycode.o 更改为输出文件 对于 Windows,它有点不同,而且更长,如果您在其中编译示例项目,Code::Blocks 将显示适用于 Windows 的替代命令。