我有一些链接问题。为了调查这个问题,我添加了-t链接器标志(gcc-Wl,-t)来打印使用了哪些库以及使用了静态库中的哪些对象。有一个静态库,在某些配置中使用一组对象文件,在其他组中使用。有什么方法(可能是ld标志)可以看出为什么特定对象(目标文件中定义了以前undefinedsymbol)被链接到二进制文件中,而同一个静态库中的其他对象不是? 最佳答案 我正在寻找的标志是-M,它将链接映射打印到标准输出。来自ld(1):-M--print-mapPrintalinkmaptothestandardoutput.Alinkmappr
我有一些链接问题。为了调查这个问题,我添加了-t链接器标志(gcc-Wl,-t)来打印使用了哪些库以及使用了静态库中的哪些对象。有一个静态库,在某些配置中使用一组对象文件,在其他组中使用。有什么方法(可能是ld标志)可以看出为什么特定对象(目标文件中定义了以前undefinedsymbol)被链接到二进制文件中,而同一个静态库中的其他对象不是? 最佳答案 我正在寻找的标志是-M,它将链接映射打印到标准输出。来自ld(1):-M--print-mapPrintalinkmaptothestandardoutput.Alinkmappr
我正尝试像这样对全局变量使用内联汇编,但编译器报错说未定义对saved_sp的引用。__asm____volatile__("movqsaved_sp,%rsp\n\t");saved_sp全局声明为staticlongsaved_sp(对于文件)。我在这里犯了什么错误? 最佳答案 如果saved_sp是static,但在不工作时工作,那么编译器似乎已决定saved_sp未在您的源文件中使用,因此决定从编译代码中完全省略它传递给汇编程序。编译器不理解asmblock中的汇编代码;它只是将其粘贴到它生成的汇编代码中。所以它不知道asm
我正尝试像这样对全局变量使用内联汇编,但编译器报错说未定义对saved_sp的引用。__asm____volatile__("movqsaved_sp,%rsp\n\t");saved_sp全局声明为staticlongsaved_sp(对于文件)。我在这里犯了什么错误? 最佳答案 如果saved_sp是static,但在不工作时工作,那么编译器似乎已决定saved_sp未在您的源文件中使用,因此决定从编译代码中完全省略它传递给汇编程序。编译器不理解asmblock中的汇编代码;它只是将其粘贴到它生成的汇编代码中。所以它不知道asm
我有一个autotools项目,它在Mac上编译得很好,但在Linux(Ubuntu12.04.1LTS)下,传递给gcc的命令行使库相对于目标文件乱序.例如,autotools生成以下命令来编译我的代码,将名为test.c的单个文件编译为名为test的二进制文件:gcc-I/usr/include/glib-2.0-I/usr/lib/x86_64-linux-gnu/glib-2.0/include-g-O2-lglib-2.0-otesttest-test.o此命令行失败:/home/user/glib-test/test.c:4:undefinedreferenceto`g_m
我有一个autotools项目,它在Mac上编译得很好,但在Linux(Ubuntu12.04.1LTS)下,传递给gcc的命令行使库相对于目标文件乱序.例如,autotools生成以下命令来编译我的代码,将名为test.c的单个文件编译为名为test的二进制文件:gcc-I/usr/include/glib-2.0-I/usr/lib/x86_64-linux-gnu/glib-2.0/include-g-O2-lglib-2.0-otesttest-test.o此命令行失败:/home/user/glib-test/test.c:4:undefinedreferenceto`g_m
我正在64位Linux机器上用C编译一个helloworld程序。我正在使用GCCARM嵌入式工具链在配备ATMELAT91SAM9G20处理器的FOXG20V板上交叉编译我的程序。第一次编译时,我遇到了一些错误,因为程序无法识别printf、return等函数(标准C函数)。所以我决定通过执行arm-none-eabi-gcc-ohellohello.c来建立函数之间的链接,我认为这些函数是在libc.a库中定义的(如果我错了请纠正我)libc.a但是结果还是报错:libc.a(lib_a-exit.o):Infunction`exit':exit.c:(.text.exit+0x1
我正在64位Linux机器上用C编译一个helloworld程序。我正在使用GCCARM嵌入式工具链在配备ATMELAT91SAM9G20处理器的FOXG20V板上交叉编译我的程序。第一次编译时,我遇到了一些错误,因为程序无法识别printf、return等函数(标准C函数)。所以我决定通过执行arm-none-eabi-gcc-ohellohello.c来建立函数之间的链接,我认为这些函数是在libc.a库中定义的(如果我错了请纠正我)libc.a但是结果还是报错:libc.a(lib_a-exit.o):Infunction`exit':exit.c:(.text.exit+0x1
我正在使用以下代码设置cr0位以禁用缓存。当我编译这个时#includeintmain(){__asm__("pushl%eax\n\t""mov%cr0,%eax;\n\t""orl$(1我收到错误消息,指出操作数对mov无效。任何人都可以给我指一个好的gccx86-64指南来做这些事情吗?另外上面的代码到底有什么问题? 最佳答案 好吧,最后我写了下面的内核模块。我不确定它是否正确,因为我没有观察到禁用缓存时应该伴随的急剧减速。但这可以正确编译和插入。任何指示都会有所帮助。谢谢!#include#includeMODULE_LIC
我正在使用以下代码设置cr0位以禁用缓存。当我编译这个时#includeintmain(){__asm__("pushl%eax\n\t""mov%cr0,%eax;\n\t""orl$(1我收到错误消息,指出操作数对mov无效。任何人都可以给我指一个好的gccx86-64指南来做这些事情吗?另外上面的代码到底有什么问题? 最佳答案 好吧,最后我写了下面的内核模块。我不确定它是否正确,因为我没有观察到禁用缓存时应该伴随的急剧减速。但这可以正确编译和插入。任何指示都会有所帮助。谢谢!#include#includeMODULE_LIC