編譯/鏈接到-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