我正在尝试使用MXE和 cmake构建一个跨平台的 QT C++ 应用程序(Linux/Windows) 。我非常非常努力地用谷歌搜索,你不知道我的谷歌查询有多棒。此类查询。但:
问题:未定义的引用。
/home/user/mxe/usr/i686-w64-mingw32.static/qt5/lib/libQt5Core.a(qregularexpression.o):qregularexpression.cpp:(.text+0x2b7): undefined reference to `pcre16_exec'
(以及许多其他此类)
解决方案:
cd ~/mxe && make pcre
然后添加到 CMakeFiles.txt:
ADD_LIBRARY(pcre STATIC IMPORTED)
SET_TARGET_PROPERTIES(pcre PROPERTIES IMPORTED_LOCATION /home/user/mxe/usr/i686-w64-mingw32.static/lib/libpcre16.a)
TARGET_LINK_LIBRARIES(${CMAKE_PROJECT_NAME} pcre)
最后一个问题:其他未定义的引用。
/home/user/mxe/usr/i686-w64-mingw32.static/qt5/lib/libQt5Core.a(qbytearray.o):qbytearray.cpp:(.text+0x60a): undefined reference to `uncompress'
/home/user/mxe/usr/i686-w64-mingw32.static/qt5/lib/libQt5Core.a(qbytearray.o):qbytearray.cpp:(.text+0x1a30): undefined reference to `compress2'
/home/user/mxe/usr/i686-w64-mingw32.static/qt5/lib/libQt5Gui.a(qharfbuzzng.o):qharfbuzzng.cpp:(.text+0x143e): undefined reference to `hb_font_funcs_set_glyph_v_origin_func'
但我不知道这个compress
或hb_font_funcs_set_glyph_v_origin_func
来自哪个图书馆。我可以一个一个地用谷歌搜索它们,但它看起来像是石器时代的做法。从长远来看,我不想对每个交叉编译的项目都这样做。
问题:
如何在不阅读 qt 构建文件的情况下找到所需库的名称?有没有办法使用 cmake 或 make 输出依赖项(需要动态库)?
可能的解决方案:
我知道我可以在二进制文件上使用ldd 。我需要的是链接时间ldd之类的东西。这可能吗?
也许我可以使用 make(在 QT 构建阶段)来打印 QT 的依赖项。如果是这样,该怎么做?
UPD:发现
mxe 相关的几乎解决方案:
usr/bin/i686-w64-mingw32.static-pkg-config --list-all | sort
usr/bin/i686-w64-mingw32.static-pkg-config Qt5Widgets --libs