2017-12-17 20 views
1

私はmyCodeという2つの既存のC++ライブラリ(library1library2)へのリンクが必要なマルチスレッドのC++パッケージ用のMakefileを用意しています。現在、myCodeは〜7 *.cppのファイルと関連するヘッダーファイルで構成されています。共有オブジェクト/共有ライブラリが正しくコンパイルされていることをテストするにはどうすればよいですか?

次は、出力に私は、フラグ-fPIC-sharedを含めましたことにより、共有ライブラリmyCode.soを意味する:

LIBRARY1_DIR := ./library1/ 
LIBRARY2_DIR := ./library2/ 

ABS_LIBRARY1_DIR := $(realpath $(LIBRARY1_DIR)) 
ABS_LIBRARY2_DIR := $(realpath $(LIBRARY2_DIR)) 

CXX := g++ 
CXXFLAGS := -Wno-deprecated -Wall -O3 -fexceptions -g -Wl,-rpath,$(ABS_LIBRARY1_DIR)/lib/ 
INCLUDES := -I$(ABS_LIBRARY1_DIR)/include/ -I$(ABS_LIBRARY2_DIR)/ -L$(ABS_LIBRARY1_DIR)/lib/ -L$(ABS_LIBRARY2_DIR)/ 

all: library1 library2 myCode 

.PHONY : myCode 
myCode: file1.cpp file2.cpp file3.hh file3.cpp file4.hh file4.cpp file5.cpp file5.hh file6.hh file6.hh file7.cpp file7.hh 
    $(CXX) $(CXXFLAGS) $(INCLUDES) file1.cpp file2.cpp -o myCode.so $(ABS_LIBRARY2_DIR)/importfile1.a -lz -ldl -llibrary1 -lpthread -fPIC -shared 


.PHONY : library1 
library1: 
    mkdir $(ABS_LIBRARY1_DIR)/build; cd $(ABS_LIBRARY1_DIR)/build; cmake ..; make; cd ../ 

.PHONY : library2 
library2: 
    cd $(ABS_LIBRARY2_DIR); ./configure; make; cd ../ 

#.PHONY : clean 
clean: 
    rm myCode.so; rm -rf $(ABS_LIBRARY1_DIR)/build; rm -rf $(ABS_LIBRARY1_DIR)/include; rm -rf $(ABS_LIBRARY1_DIR)/lib; rm -rf $(ABS_LIBRARY1_DIR)/bin; cd $(ABS_LIBRARY2_DIR); make clean; 

は質問:どのように私は共有ライブラリが正しく作成されたことをテストするのですか?これが確実に働く方法はありますか?

答えて

1

唯一の本物の証拠は、それを使用しようとしていることです。

objdumpのようなツールを使ってコンパイルしても問題はありませんが、使用するまでは実際に望むことはしません。

関連する問題