从不同的 C++ 文件调用函数时出现链接器错误

Linker error when calling function from different C++ file

提问人:random_bot 提问时间:12/30/2021 最后编辑:random_bot 更新时间:1/20/2022 访问量:422

问:

我正在尝试做我的副业。但是,当我在 main 中使用来自不同 cpp 文件的函数时,我遇到了一个奇怪的链接器错误。我在使用更大的项目中遇到了同样的问题。我测试了它,链接器错误与下面的小错误相同。CMAKE

测试1.h

#ifndef TEST1_H
#define TEST1_H
#include <iostream>
using namespace std;

void intro();

#endif

测试1.cpp

#include "test1.h"
#include <iostream>
using namespace std;
void intro()
{
    cout << "Hello World" << endl;
}

main.cpp

#include "test1.h"
using namespace std;
int main()
{
    intro();
    return 0;
}
main.o:
                 U __Z5introv
0000000000000000 T _main

test1.o:
0000000000000d38 s GCC_except_table39
0000000000000cd4 s GCC_except_table4
0000000000000d4c s GCC_except_table44
0000000000000d14 s GCC_except_table7
                 U __Unwind_Resume
0000000000000000 T __Z5introv
00000000000009b0 t __ZNKSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE13__get_pointerEv
0000000000000a30 t __ZNKSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE18__get_long_pointerEv
0000000000000a50 t __ZNKSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE19__get_short_pointerEv
00000000000007c0 t __ZNKSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE4dataEv
0000000000000a00 t __ZNKSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE9__is_longEv
0000000000000300 t __ZNKSt3__113basic_ostreamIcNS_11char_traitsIcEEE6sentrycvbEv
0000000000000a80 t __ZNKSt3__117__compressed_pairINS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE5__repES5_E5firstEv
00000000000006a0 t __ZNKSt3__119ostreambuf_iteratorIcNS_11char_traitsIcEEE6failedEv
0000000000000aa0 t __ZNKSt3__122__compressed_pair_elemINS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE5__repELi0ELb0EE5__getEv
0000000000000c80 t __ZNKSt3__15ctypeIcE5widenEc
                 U __ZNKSt3__16locale9use_facetERNS0_2idE
0000000000000610 t __ZNKSt3__18ios_base5flagsEv
0000000000000b60 t __ZNKSt3__18ios_base5rdbufEv
0000000000000740 t __ZNKSt3__18ios_base5widthEv
                 U __ZNKSt3__18ios_base6getlocEv
0000000000000630 t __ZNKSt3__19basic_iosIcNS_11char_traitsIcEEE4fillEv
0000000000000b40 t __ZNKSt3__19basic_iosIcNS_11char_traitsIcEEE5rdbufEv
0000000000000bb0 t __ZNKSt3__19basic_iosIcNS_11char_traitsIcEEE5widenEc
0000000000000730 t __ZNKSt3__19nullptr_tcvPT_INS_15basic_streambufIcNS_11char_traitsIcEEEEEEv
0000000000000b80 T __ZNSt3__111char_traitsIcE11eq_int_typeEii
0000000000000ba0 T __ZNSt3__111char_traitsIcE3eofEv
00000000000002e0 T __ZNSt3__111char_traitsIcE6lengthEPKc
                 U __ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE6__initEmc
0000000000000790 t __ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEC1Emc
0000000000000870 t __ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEEC2Emc
                 U __ZNSt3__112basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEED1Ev
                 U __ZNSt3__113basic_ostreamIcNS_11char_traitsIcEEE3putEc
                 U __ZNSt3__113basic_ostreamIcNS_11char_traitsIcEEE5flushEv
                 U __ZNSt3__113basic_ostreamIcNS_11char_traitsIcEEE6sentryC1ERS3_
                 U __ZNSt3__113basic_ostreamIcNS_11char_traitsIcEEE6sentryD1Ev
0000000000000070 t __ZNSt3__113basic_ostreamIcNS_11char_traitsIcEEElsEPFRS3_S4_E
0000000000000ab0 t __ZNSt3__114pointer_traitsIPKcE10pointer_toERS1_
0000000000000760 t __ZNSt3__115basic_streambufIcNS_11char_traitsIcEEE5sputnEPKcl
0000000000000320 T __ZNSt3__116__pad_and_outputIcNS_11char_traitsIcEEEENS_19ostreambuf_iteratorIT_T0_EES6_PKS4_S8_S8_RNS_8ios_baseES4_
00000000000008c0 t __ZNSt3__117__compressed_pairINS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE5__repES5_EC1INS_18__default_init_tagESA_EEOT_OT0_
00000000000008f0 t __ZNSt3__117__compressed_pairINS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE5__repES5_EC2INS_18__default_init_tagESA_EEOT_OT0_
00000000000005e0 t __ZNSt3__119ostreambuf_iteratorIcNS_11char_traitsIcEEEC1ERNS_13basic_ostreamIcS2_EE
0000000000000ae0 t __ZNSt3__119ostreambuf_iteratorIcNS_11char_traitsIcEEEC2ERNS_13basic_ostreamIcS2_EE
0000000000000960 t __ZNSt3__122__compressed_pair_elemINS_12basic_stringIcNS_11char_traitsIcEENS_9allocatorIcEEE5__repELi0ELb0EEC2ENS_18__default_init_tagE
0000000000000970 t __ZNSt3__122__compressed_pair_elemINS_9allocatorIcEELi1ELb1EEC2ENS_18__default_init_tagE
00000000000000e0 T __ZNSt3__124__put_character_sequenceIcNS_11char_traitsIcEEEERNS_13basic_ostreamIT_T0_EES7_PKS4_m
                 U __ZNSt3__14coutE
0000000000000090 T __ZNSt3__14endlIcNS_11char_traitsIcEEEERNS_13basic_ostreamIT_T0_EES7_
                 U __ZNSt3__15ctypeIcE2idE
                 U __ZNSt3__16localeD1Ev
                 U __ZNSt3__18ios_base33__set_badbit_and_consider_rethrowEv
                 U __ZNSt3__18ios_base5clearEj
00000000000007f0 t __ZNSt3__18ios_base5widthEl
0000000000000cb0 t __ZNSt3__18ios_base8setstateEj
0000000000000990 t __ZNSt3__19allocatorIcEC2Ev
00000000000006c0 t __ZNSt3__19basic_iosIcNS_11char_traitsIcEEE8setstateEj
0000000000000820 t __ZNSt3__19nullptr_tC1EMNS0_5__natEi
0000000000000850 t __ZNSt3__19nullptr_tC2EMNS0_5__natEi
00000000000009a0 t __ZNSt3__1L12__to_addressIKcEEPT_S3_
0000000000000700 t __ZNSt3__1L15__get_nullptr_tEv
0000000000000950 t __ZNSt3__1L7forwardINS_18__default_init_tagEEEOT_RNS_16remove_referenceIS2_E4typeE
0000000000000ad0 t __ZNSt3__1L9addressofIKcEEPT_RS2_
0000000000000c50 t __ZNSt3__1L9use_facetINS_5ctypeIcEEEERKT_RKNS_6localeE
0000000000000030 T __ZNSt3__1lsINS_11char_traitsIcEEEERNS_13basic_ostreamIcT_EES6_PKc
                 U __ZSt9terminatev
00000000000006f0 T ___clang_call_terminate
                 U ___cxa_begin_catch
                 U ___cxa_call_unexpected
                 U ___cxa_end_catch
                 U ___gxx_personality_v0
                 U _strlen

当我在terminal()中编译它时,我收到错误g++ main.cpp -o main or g++ test1.cpp main.cpp -o main

Undefined symbols for architecture x86_64:
  "intro()", referenced from:
      _main in main-86fcb6.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

我一定是链接器做错了什么,或者没有正确编译它。请帮忙。 谢谢。

C Visual C++ 链接 链接器错误

评论

2赞 fabian 12/30/2021
为什么这个被标记?您在此处仅从命令行使用 g++,而不是 visual studio 编译器...visual-c++
0赞 random_bot 12/30/2021
我也尝试在Visual Studio中编译它
3赞 Retired Ninja 12/30/2021
g++ test1.cpp main.cpp -o main应该工作。确保您已保存所有文件,以便它们是最新的。
4赞 Paul Sanders 12/30/2021
不相关:不要放入头文件。你会后悔的。理想情况下,根本不这样做。using namespace std;
1赞 random_bot 12/30/2021
@PaulSanders 谢谢你先生,坏习惯,会尽力解决的

答: 暂无答案