我收到链接时错误:
WARNING: /home/gulevich/development/camac-fedorov/camac/linux/k0607-lsi6/camac-k0607-lsi6.o (.ctors): unexpected non-allocatable section.
Did you forget to use "ax"/"aw" in a .S file?
Note that for example <linux/init.h> contains
section definitions for use in .S files.
导致错误的代码(C源代码中的汇编):
# if defined(__ELF__)
# define __SECTION_FLAGS ", \"aw\" , @progbits"
/* writable flag needed for ld ".[cd]tors" sections bug workaround) */
# elif defined(__COFF__)
# define __SECTION_FLAGS ", \"dr\""
/* untested, may be writable flag needed */
# endif
asm
(
".section .ctors" __SECTION_FLAGS "\n"
".globl __ctors_begin__\n"
"__ctors_begin__:\n"
".previous\n"
);
有什么方法可以解决这个问题吗?我的想法是在某个内存部分的开头添加一个可变的__ctors_begin__
。这段代码是使用不同的构建系统和旧编译器工作得很好的遗产。
an answer to my previous question中解释了这个汇编代码的含义。
答案 0 :(得分:1)
非常长镜头,但是部分.ctors是在链接器脚本中定义的吗? ld iirc有一个详细的选项来显示链接器脚本。
答案 1 :(得分:0)
远景:
也许您的链接器期望ELF格式(而不是COFFEE),并且由于某种原因__ELF__
未定义?您是否检查了此特定构建的预处理器输出?
答案 2 :(得分:0)
我会尽力检查__SECTION_FLAGS
的值,以确保它确实包含ax或aw。我还确定__COFF__
未定义且__ELF__
是。{1}}。如果不这样做,可能是时候抓住(可能)编译器/链接器的先前版本或未来版本,看看是否能解决您的问题。也许您可以将代码编译为C ++,并以某种方式让编译器/链接器/链接scritps执行它们应该执行的操作? Dunno完全,但这是我要开始的地方。
答案 3 :(得分:0)
部分工作正常。所以我会忽略这个警告。