我在CLion的项目中有.cpp
个文件和相应的.h
,如下所示:
element.h
#pragma once
#include <string>
#include <unordered_map>
enum class Element
{
H, He,
Li, Be, B, C, N, O, F, Ne,
Na, Mg, Al, Si, P, S, Cl, Ar,
K, Ca
};
class ElementHash
{
// simple hash function in operator()
};
// LINE IN QUESTION:
std::ostream& operator<<(std::ostream& out, const Element& e);
struct ElementData
{
};
extern const std::unordered_map<std::string, Element> elementObjectLookupTable;
extern const std::unordered_map<Element, ElementData, ElementHash> elementDataLoopkupTable;
std::string toString(const Element& e);
element.cpp
#include "element.h"
using namespace std;
ostream& operator<<(ostream& out, const Element& e)
{
out << toString(e);
return out;
}
// rest of the file's not important
这两个文件(以及其他文件)都是从子目录构建到.dylib
,然后链接到主项目构建的可执行文件。这个.dylib
在Debug构建下构建和链接很好,但是当我在IDE中切换到发布版本时,我得到以下链接器错误:
Undefined symbols for architecture x86_64:
"std::__1::basic_ostream<char, std::__1::char_traits<char> >& std::__1::operator<<<char, std::__1::char_traits<char>, std::__1::allocator<char> >(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&)", referenced from:
operator<<(std::__1::basic_ostream<char, std::__1::char_traits<char> >&, Element const&) in element.cpp.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make[3]: *** [/Users/_____/ClionProjects/chemhelp/bin/Release/libchemhelp-core.dylib] Error 1
make[2]: *** [CMakeFiles/chemhelp-core.dir/all] Error 2
make[1]: *** [CMakeFiles/chemhelp-core.dir/rule] Error 2
make: *** [chemhelp-core] Error 2
我不知道我的项目或设置中是否已经破坏了某些内容,但由于某种原因,发布版本失败了。
答案 0 :(得分:0)
错误消息看起来您的库使用与项目中其他代码不同的体系结构和/或构建设置进行编译。
当然,请先尝试清理项目。
您可能需要配置项目: