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