C ++は.cppを.soファイルにコンパイルします

1.最初にファイル形式を確認します 

その中で、cpp1は、.cppが直接呼び出され、.soが生成されるフォルダーです。

cpp2は、テストによって生成された.soで使用できるフォルダーです。

2.最初に.cppを直接コンパイルして、コードに問題がないことを確認します

a.cppコンテンツ:

#include <iostream>
#include "a.h"

void A::readImg(char* path)
{
	B b;
	b.readImg(path);
    
}

ああ内容:

#ifndef A_H_
#define A_H_
 
#include "b.h"
 
class A
{
  public:
	A(){}
	~A(){}
 
	void readImg(char* path);
 
};
 
#endif

b.cppコンテンツ:

#include "b.h"
 
void B::readImg(char* path)
{
	cv::Mat img = cv::imread(path);
    std::cout<<"图像宽为:"<<img.cols<<"\t高度为:"<<img.rows<<"\t通道数为:"<<img.channels()<<std::endl;
}

bhコンテンツ

#ifndef B_H_
#define B_H_

#include <opencv2/opencv.hpp>
class B
{
  public:
	void readImg(char* path);
};
 
#endif

CMakeLists.txtコンテンツ

cmake_minimum_required(VERSION 2.6)

project(cpp1)

add_definitions(-std=c++11)

set(CMAKE_CXX_STANDARD 11)
set(CMAKE_BUILD_TYPE Debug)


find_package(OpenCV REQUIRED)
include_directories(OpenCV_INCLUDE_DIRS)

add_executable(main ${PROJECT_SOURCE_DIR}/main.cpp a.cpp b.cpp)
target_link_libraries(main ${OpenCV_LIBS})

add_definitions(-O2 -pthread)

makeの後、実行可能ファイルmainが生成され、次の情報を出力して、コード全体に問題がないことを示します。 

./mainを実行します

3.cpp2の.soファイルを呼び出します

まず、cpp1の下に.soファイルを生成します(.soファイルはlibで始まり、使用する場合はlibを削除する必要があることに注意してください)。

g++ -fpic -shared -o libCPP1.so a.cpp b.cpp -I /usr/local/include -L /usr/local/lib -lopencv_core -lopencv_highgui

libCPP1.soファイルを生成します。

新しいcpp2フォルダーを作成し、cpp1のmain.cpp、.hファイルおよびlibCPP1.soをコピーします。

実行の最初の方法:

g++ -o ./main -std=c++11 main.cpp -L ./  -lCPP1

実行可能ファイルmainを生成して印刷すると、結果が同じであることがわかり、生成された.soファイルが成功したことを示します。

./mainを実行します

実行の2番目の方法:

CMakeLists.txtコンテンツ:生成された.soパスをリンク可能なライブラリとして使用します

cmake_minimum_required(VERSION 2.6)

project(cpp2)

add_definitions(-std=c++11)

set(CMAKE_CXX_STANDARD 11)
set(CMAKE_BUILD_TYPE Debug)


# find_package(OpenCV REQUIRED)
# include_directories(OpenCV_INCLUDE_DIRS)

add_executable(main ${PROJECT_SOURCE_DIR}/main.cpp)
# target_link_libraries(main ${OpenCV_LIBS})
target_link_libraries(main ${OpenCV_LIBS} /home/fzh/AI/learn_cplus/learn_some_api/cpp2/libCPP1.so)
add_definitions(-O2 -pthread)

cmakeの後、実行可能ファイルmainがmakeで生成され、コンパイルが成功したことを示します。

./mainを実行します

おすすめ

転載: blog.csdn.net/fanzonghao/article/details/115176223