我正在尝试使用MXE和cmake构建跨平台的QT C ++应用程序(Linux / Windows)。我非常,非常努力地搜索,你不知道我的谷歌查询有多么出色。这样的查询。但是:
问题:未定义的引用。
std::vector<double>* p_val_vec_main;
std::vector<double>* p_val_vec_slave;
std::vector<std::vector<double> >* p_mat_cache;
#pragma omp parallel
{
p_val_vec_main = new std::vector<double>(*mpStages);
p_val_vec_slave = new std::vector<double>(*mpStages-1);
p_mat_cache =
new std::vector<std::vector<double> >(3, std::vector<double>());
}
//p_val_vec_main can be used here
(以及此类许多其他人)
解决方案:
/home/user/mxe/usr/i686-w64-mingw32.static/qt5/lib/libQt5Core.a(qregularexpression.o):qregularexpression.cpp:(.text+0x2b7): undefined reference to `pcre16_exec'
然后添加到CMakeFiles.txt:
cd ~/mxe && make pcre
最终问题:其他未定义的参考文献。
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
来自哪个图书馆。我可以逐个谷歌,但它看起来像石器时代的做法。从长远来看,我不想为每个交叉编译的项目做这件事。
问题:
如何在不阅读qt构建文件的情况下找到所需库的名称?有没有办法使用cmake或make?
输出依赖项(需要动态库)可能的解决方案:
我知道我可以在二进制文件上使用ldd。我需要的是像link-time ldd。这可能吗?
也许我可以使用make(在QT构建阶段)来打印QT的依赖项。如果是的话,该怎么做?
UPD:发现了
mxe几乎解决方案:
hb_font_funcs_set_glyph_v_origin_func
usr/bin/i686-w64-mingw32.static-pkg-config --list-all | sort