【问题标题】:How do I test that a shared object/shared library has been compiled correctly?如何测试共享对象/共享库是否已正确编译?
【发布时间】:2018-05-30 20:12:48
【问题描述】:

我有以下 Makefile 用于我正在编写的多线程 C++ 包myCode,它需要链接到两个现有的 C++ 库 library1library2myCode 当前由 ~7 个 *.cpp 文件和相关的头文件组成。

以下内容用于输出共享库myCode.so,其中我包含了标志-fPIC-shared

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;

问题:如何测试共享库是否正确创建?有没有办法确保这有效?

【问题讨论】:

    标签: c++ makefile shared-libraries


    【解决方案1】:

    唯一真正的证明是在做,尝试使用它。

    您可以确定它可以使用 objdump 等工具进行编译和链接,但在您使用它之前,您不会知道它确实可以满足您的需求。

    【讨论】:

      猜你喜欢
      • 2013-04-16
      • 1970-01-01
      • 2018-07-05
      • 2017-03-24
      • 2019-07-31
      • 1970-01-01
      • 1970-01-01
      • 2011-08-13
      • 2020-01-04
      相关资源
      最近更新 更多