【问题标题】:Casacore linking error in C++ on Ubuntu 18.04Ubuntu 18.04 上 C++ 中的 Casacore 链接错误
【发布时间】:2020-09-21 09:36:27
【问题描述】:

我在 Ubuntu 18.04 上使用 GitHub 存储库从源代码安装了 casacore。安装完成,没有任何错误,并且相应的文件被写入预期的目录(.h 文件到/usr/local/include 和库到/usr/local/lib)。在尝试使用这些编译基本 C++ 文件时,出现以下错误:

tmp/ccBxZcf3.o: In function 'main': /home/zealouspriest/C_C++_Projects/bb++/ms.cpp:15: undefined reference to 'casacore::MeasurementSet::MeasurementSet()'

/home/zealouspriest/C_C++_Projects/bb++/ms.cpp:15: undefined reference to 'casacore::MeasurementSet::~MeasurementSet()'

collect2: error: ld returned 1 exit status

我使用的编译器命令如下:

g++ -g -Wall -I/usr/local/include -L/usr/local/lib -lcasa_casa -lcasa_tables -lcasa_ms ms.cpp -o ms

正在编译的 ms.cpp 文件非常简单,只是创建一个空的测量集来测试是否成功链接,如下所示:

//ms.cpp
#include <iostream>
#include </usr/local/include/casacore/ms/MeasurementSets/MeasurementSet.h>

int main(){
    casacore::MeasurementSet ms = casacore::MeasurementSet();
    return 0;
}

这是我尝试过的所有内容:

a) 使用 GitHub 说明从源代码构建,

b) 从 Ubuntu 存储库安装。

提前感谢您的宝贵时间!

【问题讨论】:

  • 你能在nm -D -C libcasa_ms.so的输出中找到缺失的符号吗?
  • @pptaszni 在运行命令时返回库中每个对象的符号。几乎所有的符号都是“T”、“U”、“V”或“u”。我不明白您所说的“查找缺失的符号”是什么意思。
  • 我的意思是如果`m -D -C libcasa_ms.so | grep "MeasurementSet::MeasurementSet()" 显示您要查找的符号已定义。在手动安装库的情况下,混合来自不同项目版本的标头和共享库是一个常见问题。无论如何,我看到你只是以错误的顺序使用了 g++ args。

标签: c++


【解决方案1】:

使用g++ 手动编译时,您需要先指定源代码,然后指定依赖项(库):

g++ -o ms ms.cpp -I/usr/local/include -L/usr/local/lib -lcasa_casa -lcasa_tables -lcasa_ms -g -Wall

如果您打算拥有更多的东西而不是一个 cpp,最好只使用 CMake。

相关主题:

或者,您可以使用-Wl,--no-as-needed 选项:

g++ -g -Wall -I/usr/local/include -L/usr/local/lib -Wl,--no-as-needed -lcasa_ms ms.cpp -o ms

【讨论】:

    猜你喜欢
    • 2018-10-17
    • 2022-09-23
    • 2020-04-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多