链接错误-C++Clang MacOs
Linking Error - C++ Clang MacOs
我有两个项目,都是用clang++和Xcode在MacOS上构建的。
我有一个库,其标头定义如下。。。。(序列化.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.成为
但是,当我构建一个只能看到标头的依赖应用程序时,我会得到以下错误。。。。
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无法链接serialize方法,但反序列化方法没有问题。正在删除序列化方法,只正确保留反序列化生成。
我不理解这个问题,也不确定如何处理。有人能教我在这种情况下该怎么办吗?
关于如何解决这个问题有什么建议吗?
注:有问题的库的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
?
相关文章:
- node-gyp 在 macOS 上未正确链接库
- 奇怪的结构&GCC&clang(void*返回类型)
- 用MacOS Mojave编译C++:致命错误:mpi.h:没有这样的文件或目录
- 数据成员SFINAE的C++17测试:gcc vs clang
- 当我编译webrtc服务器时,Windows上只支持clang-cl
- 为什么在Windows上的VS 2019和Clang 9中"size_t"在没有标题的情况下工作
- 链接阶段在Ubuntu上失败,但在MacOS上失败
- 通过自制软件(macOS)安装的clang++:编译错误
- macOS 是内置在 clang 编译器中还是内置于 xcode ide 中?
- 如何将MacOS默认值从clang更改为自制gcc
- std::to_chars在MacOS/clang上编译但不链接
- 如何在macOS中的旧扩展clang和gcc编译器中初始化数组和向量
- Clang(MacOS 32/64):在某些功能中禁用堆栈帧
- Clang无法在macOS中编译基本的头文件(如<iostream>)
- 在MacOS上使用gcc-8而不是clang编译Qt5
- 如何使用Clang在MacOS上链接核心框架
- 如何使用macOS中的clang从可执行文件中剥离所有本地符号名称
- 在 macOS 10.13.6 clang 7.0 上的 Qt 5.12.0 上找不到'QtSerialPort'文件
- 链接错误-C++Clang MacOs
- 捕获派生异常类型在 Clang/MacOS X 上失败