由于在Bjarne Stroustrup“使用c ++进行编程和实践”中找不到符号,导致链接错误

我是C ++(和一般编译语言)的新手,正在Bjarne Stroustrup“使用c ++进行编程和实践”的第8章末尾进行演练,但是当我尝试编译代码时遇到以下错误

➜  Desktop g++ -std=c++11 *.cpp -o use
Undefined symbols for architecture x86_64:
  "_foo", referenced from:
      print_foo() in my-4f7853.o
      _main in use-46cb26.o
     (maybe you meant: __Z9print_foov)
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

我也尝试过使用g++ -c my.cpp use.cppg++ -o use.exe my.o use.o但是给了同样的错误。我尝试的另一种方法是g++ -c use.cpp -o use.exe,但是use.exe运行时未产生任何输出。源代码文件是

我的

extern int foo;
void print_foo();
void print_int(int);

my.cpp

#include "my.h"
#include <iostream>

void print_foo() {
  std::cout << foo << '\n';
}

void print_int(int num) {
  std::cout << num << '\n';
}

use.cpp

#include "my.h"
#include <iostream>

int main() {

  std::cout<<"DSGFSGFSG"<< '\n';
  foo = 7;
  print_foo();

  int i = 99;
  print_int(i);

}

我看过其他类似的问题(如果看起来不太一样,则是在编译C ++程序时VS 2013中的链接时错误-B. Stroustrup使用C ++的PPP:第8章-Q1 Drill?),但是解决方案还没有没为我工作。问题是使用g ++进行编译还是我犯了更基本的错误?

编程序

全局变量foo在头文件中声明
extern int foo;

您还需要定义在它my.cpp
int foo;

该声明是一个承诺:“它存在于某处”。
该定义实际上为该变量保留了一些存储空间。

因此,您的链接器会抱怨,因为某些依赖于此承诺的代码需要访问此丢失的存储。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

C ++ Bjarne Stroustrup C ++编程和实践第二版

来自分类Dev

C ++ Bjarne Stroustrup C ++编程和实践第二版

来自分类Dev

Bjarne Stroustrup的头文件编译错误(PPP2-编程原理和实践)

来自分类Dev

这个示例如何在Bjarne Stroustrup的C ++编程语言中工作?

来自分类Dev

理解C ++程序[Bjarne Stroustrup的书]

来自分类Dev

C ++-枚举范围?Bjarne Stroustrup书

来自分类Dev

Bjarne Stroustrup说我们必须避免链接列表

来自分类Dev

移动语义C ++ 11(Bjarne Stroustrup书,第75页)

来自分类Dev

Bjarne在C ++ 11演示文稿中的错误?

来自分类Dev

由于符号导致C ++链接器失败

来自分类Dev

由于C中的strcmp和strcpy而导致的程序错误

来自分类Dev

由于C ++ 03 / C ++ 11中指针数组的恒定性导致的链接错误

来自分类Dev

由于C ++ 03 / C ++ 11中指针数组的恒定性导致的链接错误

来自分类Dev

由于错误使用插槽和信号,导致程序崩溃

来自分类Dev

由于在htmlspecialchars和phpentities中使用单引号而导致错误

来自分类Dev

由于循环引用导致链接器“重复符号”错误

来自分类Dev

在使用servlet和html的服务器上载文件中找不到符号getServletContext()错误

来自分类Dev

在使用servlet和html的服务器上载文件中找不到符号getServletContext()错误

来自分类Dev

由于出现“找不到符号类X”错误,因此无法在Intellij Idea中编译Java类

来自分类Dev

为什么Bjarne的“ C ++之旅”中的这段代码有效?

来自分类Dev

由于舍入而导致c中的无限循环?

来自分类Dev

C ++:Stroustrup示例中的运算符优先级

来自分类Dev

在Swift中使用Regex进行简单搜索时,如何避免由于搜索字符串中的特殊字符而导致错误?

来自分类Dev

使用std :: uninitialized_copy的Stroustrup示例中的资源泄漏?

来自分类Dev

可以在Obj C中链接,找不到符号,也不能在Swift中链接

来自分类Dev

由于“找不到对象'变量'”而无法使用箱线图进行绘制

来自分类Dev

使用Gradle和Spring Boot从Java引用Groovy导致“找不到符号”

来自分类Dev

由于在版本发布调试中找不到CompilerIdCXX.vcxproj,因此找不到CMAKE_C_COMPILER

来自分类Dev

错误:找不到符号(使用replaceAll)codenameone

Related 相关文章

  1. 1

    C ++ Bjarne Stroustrup C ++编程和实践第二版

  2. 2

    C ++ Bjarne Stroustrup C ++编程和实践第二版

  3. 3

    Bjarne Stroustrup的头文件编译错误(PPP2-编程原理和实践)

  4. 4

    这个示例如何在Bjarne Stroustrup的C ++编程语言中工作?

  5. 5

    理解C ++程序[Bjarne Stroustrup的书]

  6. 6

    C ++-枚举范围?Bjarne Stroustrup书

  7. 7

    Bjarne Stroustrup说我们必须避免链接列表

  8. 8

    移动语义C ++ 11(Bjarne Stroustrup书,第75页)

  9. 9

    Bjarne在C ++ 11演示文稿中的错误?

  10. 10

    由于符号导致C ++链接器失败

  11. 11

    由于C中的strcmp和strcpy而导致的程序错误

  12. 12

    由于C ++ 03 / C ++ 11中指针数组的恒定性导致的链接错误

  13. 13

    由于C ++ 03 / C ++ 11中指针数组的恒定性导致的链接错误

  14. 14

    由于错误使用插槽和信号,导致程序崩溃

  15. 15

    由于在htmlspecialchars和phpentities中使用单引号而导致错误

  16. 16

    由于循环引用导致链接器“重复符号”错误

  17. 17

    在使用servlet和html的服务器上载文件中找不到符号getServletContext()错误

  18. 18

    在使用servlet和html的服务器上载文件中找不到符号getServletContext()错误

  19. 19

    由于出现“找不到符号类X”错误,因此无法在Intellij Idea中编译Java类

  20. 20

    为什么Bjarne的“ C ++之旅”中的这段代码有效?

  21. 21

    由于舍入而导致c中的无限循环?

  22. 22

    C ++:Stroustrup示例中的运算符优先级

  23. 23

    在Swift中使用Regex进行简单搜索时,如何避免由于搜索字符串中的特殊字符而导致错误?

  24. 24

    使用std :: uninitialized_copy的Stroustrup示例中的资源泄漏?

  25. 25

    可以在Obj C中链接,找不到符号,也不能在Swift中链接

  26. 26

    由于“找不到对象'变量'”而无法使用箱线图进行绘制

  27. 27

    使用Gradle和Spring Boot从Java引用Groovy导致“找不到符号”

  28. 28

    由于在版本发布调试中找不到CompilerIdCXX.vcxproj,因此找不到CMAKE_C_COMPILER

  29. 29

    错误:找不到符号(使用replaceAll)codenameone

热门标签

归档