C++ 内存段处理错误

C++ 内存段处理错误,c++,assembly,linker,gnu,C++,Assembly,Linker,Gnu,我收到一个链接时间错误: 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 s

我收到一个链接时间错误:

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.
有办法解决这个问题吗?其思想是在某个内存段的开头放一个变量
\uuuuuu ctors\uu begin\uuuuuu
。此代码是一个遗留代码,使用不同的构建系统和较旧的编译器可以很好地工作

本汇编代码的含义在.

中有详细说明:
也许您的链接器需要ELF格式(而不是COFF),并且由于某种原因,
\uuuuuu ELF\uuuu
没有定义?您检查过这个特定构建的预处理器输出吗?

我会检查
\u SECTION\u FLAGS
的值,以确保它确实包含ax或aw。我还可以确定
\uuuucoff\uuuu
没有定义,而
\uuuu ELF\uuuu
没有定义。如果做不到这一点,可能是时候抓取(可能的)以前或将来版本的编译器/链接器,看看这是否能解决您的问题。也许你可以编译你的代码为C++,不知怎么让编译器/链接器/链接ScRITPS做他们应该做的事情?完全不知道,但这是我要开始的地方。

很长一段时间,但这是一个部分。CTOR的定义与您在链接器脚本中想要的一样吗?ld iirc有一个详细选项来显示链接器脚本。

部分工作正常。因此,我将忽略此警告。

您使用的是什么C编译器?作为补充说明,您在GCC 4.4.1中发布的64位ubuntuThis上编译的代码是链接时错误,而不是编译时错误。这里是版本信息:链接器:gnuld(用于Debian的gnubinutils)2.20.1-system.20100303;编译器:gcc(Debian 4.4.2-9)4.4.3 20100108(预发布)。
# 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"
);