- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我得到了链接程序的命令:
g++ -o prog_name prog_name.cc -lsicklms-x -pthread
但是,我没有使用命令行,我使用的是 eclipse。
我的项目称为“测试”,我只有 1 个类“main.cpp”:
/*
* Test.cpp
*
* Created on: Dec 1, 2011
* Author: igvc
*/
#include <iostream>
#include <sicklms-1.0/SickLMS.hh>
using namespace std;
using namespace SickToolbox;
int main(int argc, char *argv[]) {
/* Specify device path and baud */
string dev_path = "/dev/ttyUSB0";
sick_lms_baud_t lms_baud = SickLMS::SICK_BAUD_38400;
/* Define buffers for return values */
unsigned int measurements[SickLMS::SICK_MAX_NUM_MEASUREMENTS] = {0};
unsigned int num_measurements = 0;
/* Instantiate the object */
SickLMS sick_lms(dev_path);
try {
/* Initialize the device */
sick_lms.Initialize(lms_baud);
/* Grab some measurements */
for(unsigned int i = 0; i < 10; i++) {
sick_lms.GetSickScan(measurements,num_measurements);
cout << "\t" << num_measurements << endl;
}
/* Uninitialize the device */
sick_lms.Uninitialize();
}
catch(...) {
cerr << "error" << endl;
return -1;
}
return 0;
}
我遇到了所有这些错误:
undefined reference to `SickToolbox::SickLMS::~SickLMS()`
undefined reference to `SickToolbox::SickLMS::GetSickScan(unsigned int*, unsigned int&, unsigned int*, unsigned int*, unsigned int*, unsigned int*, unsigned int*)'
undefined reference to `SickToolbox::SickLMS::Initialize(SickToolbox::SickLMS::sick_lms_baud_t)'
undefined reference to `SickToolbox::SickLMS::SickLMS(std::basic_string<char, std::char_traits<char>, std::allocator<char> >)'
undefined reference to `SickToolbox::SickLMS::Uninitialize()'
所以我认为这是一个链接问题。我有上面的命令来链接,教程说这是必需的,但我不确定如何在 Eclipse 中设置它。
在代码显示#include sicklms-1.0/SickLMS.hh
的地方,我确实转到了项目>属性>C/C++ 构建>设置>GCC C++ 编译器>目录并将目录添加到.h 文件并解决了该问题,但现在我遇到了这些错误。我去了 GCC C++ Linker>Libraries>Library search path(-L) 并添加了 sicktoolbox-1.0.1 目录,但我不知道在 Libraries(-l) 部分放什么。
感谢您的帮助,我真的很困惑。
最佳答案
大概您正在使用 Eclipse CDT?
右键单击您的项目并从上下文菜单中选择“属性”。
在属性对话框中,选择 C/C++ Build->Settings->GCC C++ Linker->Libraries
在“库”框中,单击 + 按钮以添加新库,键入 sicklms
您的库必须位于链接器的路径中。/usr/lib 和/usr/local/lib 是相当标准的。对于 -l,库名称必须是 libsicklms.a 或 libsicklms.so,因为链接器会将 lib 添加到库名称之前。
如果 sicklms 是使用 ./configure && make && make install 从源代码安装的,那么库应该在标准库路径中,即/usr/lib 或/usr/local/lib 否则,你的问题不是你的链接器,但是 sicklms 的安装方式。
如果上述任何说明不可行,您需要告诉我
a) Eclipse 版本(Galileo、Indigo 等)
b) 如果您安装了 CDT。
c) sicklms 是如何安装在您的系统上的(包管理器、从源代码构建等)。
关于c++ - 将程序链接到 Eclipse 中的 C++ 项目? Linux,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8373961/
我是一名优秀的程序员,十分优秀!