Linux で開発された C++ プロジェクトがあり、Windows ユーザーの同僚に実行可能ファイルを渡して渡したいと考えています。
問題を調べたところ、 のi586-mingw32msvc-g++
代わりに を使用してコンパイルする方法があることがわかりましたg++
。また、このソリューションは、リンクされたライブラリを再構築する必要があるという問題を解決することも理解していました。MXE スクリプト ( http://mxe.cc/ ) を使用してこれを解決したいと考えていました。
私のmakefileは次のとおりです(私はこれが初めてで、提案は大歓迎です):
#main.make
CC = i586-mingw32msvc-g++
CFLAGS = -Wall -O2
LDFLAGS =
SOURCES = <list of cpp files>
LDLIBS = -L/usr/i586-mingw32msvc/lib/ -llapack -lblas -lgsl -lgslcblas -lm -lmingw32
OBJECTS=$(SOURCES:.cpp=.o)
EXECUTABLE = main_simple.exe
all: $(SOURCES) $(EXECUTABLE)
$(EXECUTABLE): $(OBJECTS)
$(CC) $(LDFLAGS) $(OBJECTS) -o $@ $(LDLIBS)
.cpp.o:
$(CC) $(CFLAGS) -c $<
clean:
rm *.o main_simple.exe ./Output/* ./Output/*/* ./Output/*/*/*
しようとするmake
と、次のような gsl 関連のエラーがたくさん表示されます。
utilities.o:utilities.cpp:(.text+0x2d1): undefined reference to `_gsl_matrix_alloc'
utilities.o:utilities.cpp:(.text+0x2dc): undefined reference to `_gsl_vector_alloc'
....
utilities.o:utilities.cpp:(.text+0x42e): undefined reference to `_gsl_matrix_free'
utilities.o:utilities.cpp:(.text+0x70f): undefined reference to `_gsl_fit_linear'
utilities.o:utilities.cpp:(.text+0x722): undefined reference to `_gsl_stats_correlation'
collect2: ld returned 1 exit status
これは、私が MXE でクロスビルドしたと思っていたライブラリをコンパイラが本当に見つけたということですか? 私に何ができる?
あるいは、cmake
よりクリーンなソリューションでしょうか?.exe
これを使用して Linux マシンからファイルを作成できますか? または、その場合、同僚に自分のマシンで再コンパイルするよう依頼する必要がありますか?
あなたが私に与えることができるどんな助けにも感謝します!