Makefile 架构x86_64的未定义符号;十六进制(QTextStream);,引用自:(在Mac上安装PyQwt-5.2.0)

Makefile 架构x86_64的未定义符号;十六进制(QTextStream);,引用自:(在Mac上安装PyQwt-5.2.0),makefile,build,qt4,qmake,Makefile,Build,Qt4,Qmake,我正在尝试安装emzedpython包进行LC/MS分析。此包依赖于PyQt4和PyQWT。我已经安装了所有东西,但还不能构建PyQWT。我已经跳过了这么多的错误,我已经被困在这个链接错误了一段时间 我已经尝试过修改makefile(Qwt_version_info.mak)来传递包含目录。我不知道如何指定适当的链接库来编译(QTextStream等) $make-f qwt\u version\u info.mak 我们联系上了吗 我们联系上了吗 我们联系上了吗 我们联系上了吗 我们联系上了吗

我正在尝试安装emzedpython包进行LC/MS分析。此包依赖于PyQt4和PyQWT。我已经安装了所有东西,但还不能构建PyQWT。我已经跳过了这么多的错误,我已经被困在这个链接错误了一段时间

我已经尝试过修改makefile(Qwt_version_info.mak)来传递包含目录。我不知道如何指定适当的链接库来编译(QTextStream等)

$make-f qwt\u version\u info.mak
我们联系上了吗
我们联系上了吗
我们联系上了吗
我们联系上了吗
我们联系上了吗
g++-v-headerpad\u max\u install\u name-o qwt\u version\u info.app/Contents/MacOS/qwt\u version\u info qwt\u version\u info.o
苹果LLVM版本10.0.1(clang-1001.0.46.4)
目标:x86_64-apple-darwin18.7.0
线程模型:posix
InstalledDir:/Library/Developer/CommandLineTools/usr/bin
“/Library/Developer/CommandLineTools/usr/bin/ld”-demangle-lto_library/library/Developer/CommandLineTools/usr/lib/libLTO.dylib-dynamic-arch x86_64-headerpad_max_install_name-macosx_version_min 10.9.0-o qwt_version_info.app/Contents/MacOS/qwt_version_info.o-lc++-LSSystem/library/Developer/CommandLineTools/usr/lib/clang/10.0.1/libclang_rt.a
架构x86_64的未定义符号:
“十六进制(QTextStream&)”,引用自:
_qwt_版本_info.o中的main
“QArrayData::解除分配(QArrayData*,无符号长,无符号长)”,引用自:
qwt_version_info.o中的QTypedArrayData::解除分配(QArrayData*)
“QTextStream::QTextStream(QIODevice*)”,引用自:
_qwt_版本_info.o中的main
“QTextStream::~QTextStream()”,引用自:
_qwt_版本_info.o中的main

“QTextStream::operator这可能还不是完整的答案,但它太大,无法放入注释中

因此,让我们把重点放在这一行:

g++ -v -headerpad_max_install_names -o qwt_version_info.app/Contents/MacOS/qwt_version_info qwt_version_info.o      
现在您得到了一些未定义的引用,如:QByteArray和QTextStream。它们都位于库(IIRC)qtxcore或qtxcore(debug)中,
x
是qt版本。因此,我想对您来说,它是
libqt4core.So
libqt4cored.So

因此,我们需要两个信息位,我们需要知道这是安装在哪里,以及您有哪种类型(调试或发布)

这些库通常位于
/usr/lib/…
的某个地方,您会发现
libqt5core[d]。因此
就在那里的某个地方(IIRC/usr/lib/qt4/-但这只是一个猜测)

假设您有调试库-但两者都可能存在,然后我们可以将该库链接到您的链接器行:

注意:只需手动运行这一行即可开始,然后我们将其添加到您的makefile中

g++ -v -headerpad_max_install_names -o qwt_version_info.app/Contents/MacOS/qwt_version_info qwt_version_info.o -L/usr/lib/qt4 -lqt4cored
在这里您可以看到,我们添加了一条路径,指向库所在的位置(-L…)和库本身(-L…)

现在,这将使您的链接器能够找到QByteArray等。但是,根据您使用的Qt位,您可能还缺少一些内容。下面是您可能需要添加的其他可能的LIB的列表:

libQt4Gui.so
libQt4Core.so
libQt4DBus.so
libQt4PrintSupport.so
libQt4Widgets.so
libQt4Network.so
libQt4XcbQpa.so
libQt4Svg.so
libicui18n.so
libicuuc.so
libicudata.so
注意:我从很久以前回答的另一个问题中得到了这个列表,因此它可能需要编辑,您可能想使用调试版本(例如libQt5Gui.so->libQt5Guid.so)。列表没有特定的顺序

因此,你最终可以:

g++ -v -headerpad_max_install_names -o qwt_version_info.app/Contents/MacOS/qwt_version_info qwt_version_info.o -L/usr/lib/qt4 -lqt4cored -licudata -licuuc ... etc...

让这行运行起来,然后我们可以看到如何将它添加到makefile中-添加libs/路径很简单。

这就是所有的输出吗?
$(CXX)-c$(cxflags)$(INCPATH)-o qwt_version_info.o qwt_version_info.cpp
看起来它可以扩展为:
g++-v-headerpad_max_install_name-o qwt_version_info.app/Contents/MacOS/qwt_version_info.o
但是查看makefile顶部设置的变量,我认为它会有所不同。而且我还没有看到任何
链接吗
info/debug行-在解析makefile时会打印这些行(makefile首先解析文件,打印任何信息行,然后运行规则)。您能提供更多关于这里发生的事情的信息吗?我将所有的“我们正在链接吗?”“在运行makefile之后进入。它们都在输出的最顶端打印。我不知道make首先解析文件,然后运行规则。现在很清楚为什么它们都打印在输出的顶部。我编辑了这篇文章,以准确反映我运行上面发布的makefile时得到的输出。啊,我现在明白了。因此,我们在跟踪开始时看到的这行代码是:
$(LINK)-v$(LFLAGS)-o$(TARGET)$(OBJECTS)$(OBJCOMP)$(LIBS)
。哪种类型表示$(OBJECTS)为空或对象已生成(文件
qwt\u version\u info.o
已存在)。接下来是没有链接标志,我想这就是你想要添加的?你需要链接到哪些库-因为我们可以将它们添加到用来组成
$(链接)
$(子库)
,我很确定缺少的是Qt4中的某个库,我不知道如何找到正确的库或如何搜索缺少的符号。我仍在努力寻找链接,所以我在电脑上找不到libQt4Core.So。我运行了
find/usr/-name“libQt4Core.so”-print
,但什么也没有得到。我在/usr/local/ceral下找到了QtCore.so文件/pyqt@4/4.12.1_1/lib/python2.7/site-packages/PyQt4。当我用-L标志和-lQtCore传递这个目录时,我得到一个链接错误
ld:library not found for-lQtCore
这是我运行的命令:
g++-v-headerpad\u max\u install\u names-o qwt\u version\u info.app/Contents/MacOS/qwt\u version\u info.o-L/usr/local/cillar/pyqt@4/4.12.1_1/lib/python2.7/site-packages/PyQt4-lQtCore