我正在查看Eclipse中构建的输出.我正在为ColdFire处理器进行交叉编译.编译行看起来像这样:
m68k-elf-g++ -O2 -falign-functions=4 -IC:\nburn\include -IC:\nburn\MOD52...
Run Code Online (Sandbox Code Playgroud)
接着是更多的包含文件,明显的"编译器"标志,最后是我改变的一个源文件.下一行再次调用相同的工具:
m68k-elf-g++ src\main.o src\TouchPanelMediator.o src\Startup.o....
Run Code Online (Sandbox Code Playgroud)
接着是更多的.o文件,一些.ld文件和一些.a文件.这似乎是将所有各种类型的目标文件链接在一起.
在Gnu家族中,g ++是一些超级应用程序,可以根据参数确定是否需要编译或链接?它是否具有内置的功能,或者它只是调度编译到gcc并链接到ld而我的日志只是没有显示?
我知道这表明链接器问题,主要是未解析的符号.我知道要解决这个问题/摆脱那个错误消息,就必须提供更多的信息.我知道有很多关于解决这个问题的问题.
我的问题旨在帮助理解make和ld,找出什么(以及谁)试图用这条线表达什么.
collect2: ld returned 1 exit status
Run Code Online (Sandbox Code Playgroud)
我有一个使用as编译的目标文件(来自汇编程序代码).
如果我使用ld链接它,当我尝试stepi(或nexti)gdb抱怨地址0x0的内存访问.如果我使用gcc链接它,一切都很好.
我猜这个问题是由ld引起的,与gcc的链接结果相比,它产生的部分更少.
有没有办法配置gdb更冗长,所以我可以弄清楚可执行文件有什么问题?
(gdb) b main
Breakpoint 1 at 0x100000f8e
(gdb) r
Breakpoint 1, 0x0000000100000f8e in main ()
(gdb) x/10i $pc
0x100000f8e <main>: fbld 0x6c(%rip) # 0x100001000 <data1>
0x100000f94 <main+6>: fimul 0x7a(%rip) # 0x100001014 <data2>
0x100000f9a <main+12>: fbstp 0x60(%rip) # 0x100001000 <data1>
0x100000fa0 <main+18>: mov0x0 $0x2000001,%rax
0x100000fa7 <main+25>: mov $,%rdi
0x100000fae <main+32>: syscall
(gdb) si
Cannot access memory at address 0x0
0x0000000100000f94 in main () …
Run Code Online (Sandbox Code Playgroud) 我开始在 Debian 8 下使用 gcc 进行多线程编程。我已经成功编写并运行了一个多线程测试应用程序 (foobar.c),但我对 Makefile 感到困惑(从示例中复制)。特别是,有效的命令是
gcc foobar.c -o foobar -pthread
Run Code Online (Sandbox Code Playgroud)
我对“-pthread”感到困惑。就是它
(a) 值为“thread”的选项“-p”,或
(b) 参数“-pthread”?
如果是任何一种情况,它实际上在做什么?包括一些图书馆?包括一些对象?设置其他选项?