[英]Linking Error - C++ Clang MacOs
我有两个项目,都在MacOS上使用clang ++和Xcode构建。
我有一个标头定义如下的库。...(serialization.h)
#pragma once
#include <visionApp/cv/matchers/visual_database.h>
namespace visionApp {
void serializeDB(visionApp::VisualDb visualDB, std::string fileName);
visionApp::VisualDb* deserializeDB(std::string fileName);
}
cpp文件如下...(serialization.cpp)
#include "serialization.h"
namespace visionApp {
void serializeDB(visionApp::VisualDb visualDB, std::string fileName)
{
}
visionApp::VisualDb* deserializeDB(std::string fileName)
{
return new visualDB();
}
}
然后在另一个类中调用该方法。
void saveRecogniser(std::string fileName)
{
serializeDB(currentVisualDB.get(), fileName);
}
void loadRecogniser(std::string fileName)
{
mVisualDatabase.reset(deserializeDB(fileName));
}
注意:currentVisualDB是指向.get()的共享指针,它返回一个指针。
这一切都很好。 太好了……并制作libvisionApp.a
但是当我构建一个只能看到标题的从属应用程序时,出现以下错误...。
Undefined symbols for architecture x86_64:
"visionApp::serializeRecognizer(visionApp::VisualDb*, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >)", referenced from:
visionApp::Recogniser::saveRecogniser(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >) in libvisionApp.a(planar_recogniser.o)
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
现在,此链接错误表明clang无法链接序列化方法,但是反序列化方法没有问题。 删除序列化方法,并仅保留反序列化构建正确。
我不了解此问题,并且不确定如何继续。 有人可以在这样的情况下教育我怎么做吗?
有关如何解决此问题的任何建议?
注意:有关库的Lipo输出。
Hal:Release daniel$ lipo -info libvisionDB.a
input file libvisionDB.a is not a fat file
Non-fat file: libvisionDB.a is architecture: x86_64
您已声明serializeDB
以按值获取第一个参数。
void serializeDB(visionApp::VisualDb visualDB, std::string fileName);
调用函数时,将指针用作第一个参数:
void saveRecogniser(std::string fileName)
{
serializeDB(currentVisualDB.get(), fileName); // You said that currentVisualDB is a std::shared_ptr
}
我不知道您的构建为何进入链接阶段,它不应该。 也许您在多个地方声明了serializeDB
?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.