我有兩個項目,都在MacOS上使用clang ++和Xcode構建。鏈接錯誤 - C++ Clang MacOs
我有如下定義的報頭的文庫....(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是一個共享的指針獲得()返回一個指針。
這一切都很好。這是偉大的......,讓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不能鏈接serialize方法,但它對反序列化方法沒有問題。刪除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'來獲取第一個參數值。然後你用指針調用它。它不應該通過連接階段,應該嗎? – user3188346
@ user3188346哇。我真笨! :D你說得對!我不知道爲什麼圖書館建立,但它確實....然後鏈接失敗。更改指針的引用可修復它!謝謝。我如何讓你的評論成爲這個主題?你先生!需要點! –