2012-06-20 93 views
23

「未定義的引用'主」我從移植的Solaris應用到Linuxcrt1.o:在功能`_start: - 在Linux中

其鏈接的對象文件一個main()定義不具備的。但編譯和鏈接在Solaris中正確完成並生成可執行文件。在Linux中我得到這個錯誤

/usr/lib/gcc/x86_64-redhat-linux/4.1.2/../../../../lib64/crt1.o: In function `_start': 
(.text+0x20): undefined reference to `main' 

我的問題是,我不包括自其巨大的應用新.C/.o文件和已經運行了多年。我怎樣才能擺脫這個錯誤?

生成文件的代碼extractes:

RPCAPPN = api 
LINK = cc 

    $(RPCAPPN)_server: $(RPCAPIOBJ) 
      $(LINK) -g $(RPCAPIOBJ) -o $(RPCAPPN)_server $(IDALIBS) $(LIBS) $(ORALIBS) $(COMMONLIB) $(LIBAPI) $(CCLIB) $(THREADLIB) $(DBSERVERLIB) $(ENCLIB) 
+0

你能發佈makefile和/或實際的構建命令嗎? –

+0

是的..我已經添加了幾行makefile。 – Blackforest

+0

簡單:要麼停止調用main或者定義一個主(^)爲什麼它在solaris上工作?它是否有特殊的鏈接器標誌(鏈接到共享對象?) – wildplasser

回答

23

嘗試增加-nostartfiles你的連接選項,即

$(LINK) -nostartfiles -g ... 

gcc documentation

-nostartfiles 
    Do not use the standard system startup files when linking. The standard system libraries are used normally, unless -nostdlib or -nodefaultlibs is used. 

這將導致crt1.o不被鏈接(通常默認鏈接) - 通常只在您實施自己的_start代碼時使用。

+3

取決於問題,那麼這不是一個真正的解決方案 - 當我嘗試進行升壓測試項目並添加此標誌使得所有事情都變得更糟時,我遇到了類似的問題 – serup

13

-shared鏈接選項必須附加當你遵循一個這樣

+2

這實際上幫助我安裝了以前由於上述錯誤而失敗的R軟件包。 – Thomas

+0

同意;這也幫助我解決了爲sqlite編譯外部函數的問題。 – gregory

1

我不得不試圖建立與提升一個新的測試項目時類似的結果,而事實證明,我錯過了一個聲明:

#define BOOST_TEST_MODULE <yourtestName> 
0

對我來說,在字符串文字中使用原始UTF-8字符時會出現此錯誤。 ARM7HL,Sailfish操作系統,GNU C++。