未定义的引用…但一切都是联系在一起的
Undefined reference ... But all is linked
我有一个CodeBlocks IDE的链接问题。但我想一切都会好的。
我想使用laslib库。他们提供了一个我在CodeBlocks IDE中链接的.lib文件(我通常这样做…)。然后我加入了"inc"文件夹,其中包含。hpp,包括。
现在,我做了最小的要求,包括一个外部库。
然后,在我的"main"函数中,我已经包含了必要的文件,CodeBlocks智能感知为我提供了函数的原型(所以我想链接是好的)。
下面是我的代码:#include <iostream>
#include <vector>
#include "lasreader.hpp"
#include "laswriter.hpp"
#include "lasdefinitions.hpp"
#define FILENAME "D:\las.las"
#define FILEOUT "D:\out"
int main(int argc, char** argv)
{
// Assume that's correct for simplicity @TODO : check argv
std::string filename = FILENAME;//argv[1];
std::string file_out = FILEOUT; //argv[2];
LASreadOpener lasreadopener;
LASwriteOpener laswriteopener;
lasreadopener.set_file_name(filename.c_str());
laswriteopener.set_file_name(file_out.c_str());
lasreadopener.parse(0, NULL); // parse without args
// Declare lasreader
LASreader* lasreader;
// Open the file
lasreader = lasreadopener.open();
// Create and open the writer
LASwriter* laswriter = laswriteopener.open(&lasreader->header);
// Loop through the points (note they will already be filtered)
while (lasreader->read_point())
{
// Show coordinates
std::cout << lasreader->point.get_x() << ", " << lasreader->point.get_y() << ", " << lasreader->point.get_z() << std::endl;
// Write point
laswriter->write_point(&lasreader->point);
// Add it to the inventory (keeps track of min/max values for the header)
laswriter->update_inventory(&lasreader->point);
}
laswriter->update_header(&lasreader->header, TRUE);
laswriter->close();
lasreader->close();
delete laswriter;
delete lasreader;
}
错误如下:
main.cpp|17|undefined reference to `LASreadOpener::LASreadOpener()'|
main.cpp|18|undefined reference to `LASwriteOpener::LASwriteOpener()'|
等等……
我不知道我做错了什么…我已经尝试了"硬"的方法,将。hpp和。lib复制到mingw相应的文件夹中…
任何想法?
文件结构如下:
./LAStools
./myproject
从./myproject
我编译如下:
g++ main.cpp -I../LAStools/LASlib/inc/ -I../LAStools/LASzip/src -llas -L.
这导致了代码的无错误编译:
#include "lasreader.hpp"
#include "laswriter.hpp"
int main(int argc, char *argv[]){
LASreadOpener lasreadopener;
lasreadopener.set_file_name("original.las");
LASreader* lasreader = lasreadopener.open();
while (lasreader->read_point()) {}
lasreader->close();
delete lasreader;
return 0;
}
确保为与库相同的体系结构构建代码。默认情况下,LASlib是为32位构建的,但你的编译器可能默认为64位,所以编译器不会链接它们,因为不同的方法签名。
你可以尝试重新构建64位的LASlib,或者为32位编译你自己的软件。
不幸的是,你的链接器在某种程度上隐藏了这个问题,因为它混淆了方法名。如果您可以将编译器设置为输出混乱的名称,这可能会有所帮助,因为它可以突出显示32位和64位二进制文件之间的差异。例如,解码一个混乱的名称(例如使用https://demangler.com)可以指示链接器期望一个返回64位指针的方法,但库已经定义了一个具有相同名称但返回32位指针的方法。
相关文章:
- 如何将两个不同矢量的同一位置的两个元素组合在一起
- 将图形属性与 std::unique_ptr 捆绑在一起
- 你能在 c++ 中将不同的数字类型加在一起吗?
- 如何将两个字符串加在一起,就好像它们是变量一样?
- 当返回语句时,逗号运算符、大括号初始化列表和 std::unique_ptr 组合在一起
- 为什么push_back和emplace_back结合在一起时,会有不同的行为
- 在浮点精度成为一个问题之前,可以将多少个浮点值加在一起
- 为什么在template函数广播中把两个extensor表达式加在一起不正确
- 实现具有浮点键的类似哈希表的数据结构,其中公差内的值被合并在一起
- 如何在Qt TableView中将列的宽度调整为数据并将最后一部分拉伸在一起
- 编译器如何将链表中的地址字符串在一起?
- 在 c++ 中,两个日志行与 log4Cxx 混合在一起
- 如何将两个 jlong 数据类型转换为 jstring,然后将两个字符串连接在一起以便从 JNI 将字符串返回给 jav
- 将许多向量排序在一起
- C++ std:: 并包括它们如何组合在一起?
- 通过字符串迭代并将每个循环中的先前字符组合在一起
- CMake 项目结构:如何正确地将库合并在一起并将它们包含在多个可执行文件中
- C 操作员超载将3个向量加在一起
- 这个解决方案是如何联系在一起的
- 未定义的引用…但一切都是联系在一起的