编译/链接到-nostdlib
似乎可以防止静态初始化,即使我将自己的crti.s和crtn.s与.init
/.fini
部分相加。g ++,静态初始化和-nostdlib
有没有解决方法可以使g ++生成插入.init
或我可以手动调用的静态初始化代码?
这是我的尝试:
g++ -o test.o -c -fno-use-cxa-atexit test.cc # has _start (entry point)
# that calls _init and _main
as -o crti.o crti.s # has _init in section .init
as -o crtn.o crtn.s
g++ -o test ./crti.o test.o -nodefaultlibs -nostartfiles ./crtn.o
-nodefaultlibs
单独包括静态初始化代码和电话,但部队使用的libc-_start/_init的。
-nodefaultlibs -nostartfiles
允许我使用自己的_start/_init,但不包含代码或调用静态初始化。
试试这个'G ++ -o测试./crti.o ./crtn.o test.o轮候册,-nodefaultlibs -nostartfiles'与看到您的使用,我觉得你只希望你的启动文件被包含在内,并且你似乎可以使用标准库中的其他库文件? – 2012-04-12 08:56:37
@Pavan:我试过'-Wl,-nodefaultlibs -Wl,-nostartfiles',但是然后libc-_init被编译器包含。用法适用于IBM Cell SPU - 我需要自己的启动代码来设置所有内容,并且不使用libc函数,但仍需要静态构造函数才能调用。 – Thomas 2012-04-12 09:06:51
我不熟悉C++,所以我不明白你的意思,但仍然需要静态构造函数来调用“?你能告诉我一些例子吗?我一直在想静态库。 – 2012-04-12 09:19:10