48

アプリケーションを Solaris から 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 ファイルを含めることができないことです。このエラーを取り除くにはどうすればよいですか?

makefile のコード抜粋:

RPCAPPN = api
LINK = cc 

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

6 に答える 6

48

-nostartfilesリンカー オプションに追加してみてください。

$(LINK) -nostartfiles -g ...

gccのドキュメントから:

-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コードを実装する場合にのみ使用されます。

于 2012-06-20T10:41:21.003 に答える
2

ブーストを使用して新しいテスト プロジェクトをビルドしようとしたときに同様の結果が得られましたが、宣言が 1 つ不足していることが判明しました。

#define BOOST_TEST_MODULE <yourtestName>
于 2016-10-06T07:07:52.530 に答える