我定義了一個機械手:爲什麼這個操縱器不會與-O3連接?
inline std::ostream& my_manip(std::ostream& os);
裏面我是用像這樣:
std::cout << my_manip << ...;
所有這一切都彙編就好了兩個調試使用Boost.bjam和釋放模式。然而,當談到時間聯繫起來,我得到的只是釋放模式以下錯誤:
Undefined symbols for architecture x86_64:
"std::__1::basic_ostream<char, std::__1::char_traits<char> >::operator<<(std::__1::basic_ostream<char, std::__1::char_traits<char> >& (*)(std::__1::basic_ostream<char, std::__1::char_traits<char> >&))", referenced from:
my_routine in main.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
或者,更清晰:
Undefined symbols for architecture x86_64:
"std::ostream::operator<<(std::ostream& (*)(std::ostream&))", referenced from:
my_routine in main.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
如果我註釋掉的機械手,一切編譯和鏈接就好了在調試和發佈模式下。
如果我離開操縱器,我可以通過用-O0
重建項目來解決鏈接器錯誤,但是如果我的發佈模式是bjam默認(-O3
),我更喜歡它。
我運行的Xcode 4.6.2及其相關的鏗鏘:
Apple LLVM version 4.2 (clang-425.0.28) (based on LLVM 3.2svn)
Target: x86_64-apple-darwin12.5.0
Thread model: posix
我如何得到這個機械手與優化正確鏈接?
看來,很多人已經開始在更新到小牛後得到鏈接器錯誤......這是否是後發佈的幫助:http://stackoverflow.com/questions/19550436/how-mavericks-xcode5-0-1 -changed-the-compiler-and-linker – AndyG
@AndyG:感謝您的鏈接,不幸的是它似乎不相關。與'-O0'編譯的源代碼鏈接不會產生錯誤,所以我能夠獲得* *鏈接。還有什麼我仍然運行10.8.5和Xcode 4.6.2。 – fbrereto