以前に作成されたいくつかの静的ライブラリを取り、実行ファイルにリンクするMakefileを作成しようとしました。 1つの図書館にはmain
ルーチンがあります。Makefile:実行可能ファイルに複数の* .aをリンクする
私はエラーを取得する:
/lib/../lib64/crt1.o: In function `_start':
(.text+0x20): undefined reference to `main'
collect2: error: ld returned 1 exit status
make: *** [dockSIM_gcc_release] Error 1
私はちょうどmain
ルーチンを持っていますが、エラーは同じままとmake
を呼び出した後に直接来るライブラリをリンクして、それを試してみました。
のMakefile:
SHELL = /bin/sh
RM=/bin/rm -f
CXX=g++
PROGNAME=dockSIM_gcc_release
DEFINES=-DDOCKSIM_VERBOSE=FALSE -DNDEBUG -DPRINT_LOG_MSG=0 -DPRINT_DEBUG_MSG=0
LDFLAGS = -fopenmp -g -O3 -std=c++11 -mavx -mstackrealign -fstrict-aliasing
LIBS= -lnagc_mkl -lm -L../externalCode -lpardiso500-GNU481-X86-64 -lacml
FILENAMES = commandInterpreter_lib.a
OBJNAMES =
all: $(PROGNAME)
$(PROGNAME): $(FILENAMES)
$(CXX) $(LDFLAGS) $(DEFINES) -o $(PROGNAME) $(FILENAMES)
clean:
$(RM) *.mo *.ho *.o $(PROGNAME) core *~
test:
echo $(FILENAMES)
showlibs:
echo $(LIBS)
フラグは、コードをコンパイルするために使用されたものと互換性があります。
g ++4.9.3が使用される。メインルーチンの
署名:ヘルプとよろしくため
int main(int argc, char* argv[])
感謝。
どのライブラリに 'main'がありますか? 'commandInterpreter_lib.a'か未使用の' nagc_mkl'、 'pardiso500-GNU481-X86-64'、' acml'ライブラリですか? (未使用、 '$(LIBS)'はリンク時に使用されないので、それは思われます) – Kusalananda
commandInterpreter_libにはメインがあります。 LIBSは意図的に最小限の例が残っています。 – user3572032
そして、あなたの問題には絶対に*関係がありません。あなたはC++コンパイラとリンクしています。他にも同じコンパイラでコンパイルされていましたか? – Kusalananda