查找库依赖项(make / cmake / linker)

时间:2016-11-23 19:23:28

标签: c++ qt cmake mxe

我正在尝试使用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

0 个答案:

没有答案