繁体   English   中英

链接错误-C ++ lang MacOs

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM