簡體   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