提问人:wartonbega 提问时间:4/25/2022 最后编辑:wartonbega 更新时间:4/25/2022 访问量:838
Xcode:包含标头时未定义的符号
xcode : undefined symbols when including headers
问:
我最近开始了一个使用 swift 和 c++ 的项目。所以我安装了 Xcode 并开始使用它。我首先遇到了一些错误,但修复了主题。
但是,我仍然得到了一些Undefined symbols for architecture x86_64:
我在网上搜索,但我找不到我问题的解决方案(否则我不会问这个问题)。
这是整个错误:
"parser(std::__1::vector<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::allocator<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > > >, Node*, int, int)", referenced from:
utilise_file(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, bool, bool, bool, bool, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >) in main.o
"recognize_paternes(Node*, bool)", referenced from:
utilise_file(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, bool, bool, bool, bool, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >) in main.o
"ast_t_rep(Node*, int)", referenced from:
utilise_file(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, bool, bool, bool, bool, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >) in main.o
"lex(char const*, std::__1::vector<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::allocator<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > > >&)", referenced from:
utilise_file(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, bool, bool, bool, bool, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >) in main.o
"visitor(std::__1::vector<Node*, std::__1::allocator<Node*> >, bool, bool, bool)", referenced from:
utilise_file(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, bool, bool, bool, bool, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >) 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)
但我认为我们可以考虑:
utilise_file(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, bool, bool, bool, bool, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >) in main.o
因为这个错误似乎是多余的。
在我的文件中,我导入了头文件 (),其中我声明了 .main.cpp
parser.h
Node *parser(vector<string>, Node *, int, int);
在 中,我调用函数:main.cpp>utilise_file(...)
parser
void utilise_file(){
...
vector<string> code_ref = vector<string>();
vector<string> lexeme = lex(source.c_str(), code_ref);
Node *ast_t = new Node();
ast_t->value = "main";
ast_t->type = "root";
Node *p = parser(lexeme, ast_t, 0, int(lexeme.size()));
...
}
所以通常情况下,我不会收到这个错误。
在我看来,这是一个“类型”类型的问题,但我不知道是什么。
我在网上搜索了解决方案,并尝试添加 Xcode>Linking>Other Liner Flags,但没有帮助。-Xlinker
我还考虑过在编译命令行中添加链接到标头的标志,但我认为 Xcode 会自动执行此操作。(或者不是,因为我的许多标题在文件树丛中无法识别......
感谢您的帮助;)
编辑:我发现了问题,我不得不在Xcode中手动添加以前编写的头文件(没有自动完成)。
答:
1赞
wartonbega
4/25/2022
#1
我发现了问题所在。
当我在 Xcode 中导入之前编写的头文件时,Xcode 没有将它们附加到项目中。
我不得不手动添加主题,现在它工作正常!
评论
0赞
Some programmer dude
4/25/2022
问题中的错误与任何头文件无关。您需要学习创建和构建 C++ 程序所需的步骤:1) 编辑源代码;2)将源代码编译成目标文件;3) 将目标文件和库链接到可执行文件中。头文件仅在步骤 2 中涉及。库仅涉及步骤 3。
评论
Node *parser(vector<string>, Node *, int, int);.
Node *parser(vector<string>, Node *, int, int); { /* Some code ... */ }