Linux g++コンパイルダイナミックリンクライブラリおよびC++OpenCVエンジニアリング呼び出し
6176 ワード
g++ダイナミックリンクライブラリのコンパイル簡単なダイナミックリンクライブラリ をコンパイルコードとファイルフォーマット コンパイルと呼び出し 1、動的リンクライブラリ を生成する.2、コンパイル呼び出し生成の動的ライブラリ 3、環境変数パス を追加4、運転 サードパーティライブラリ(opencv)に依存する動的リンクライブラリ をコンパイルする.コードとファイルフォーマット コンパイルと呼び出し 単純なダイナミックリンクライブラリのコンパイル
コードとファイルフォーマット
フォルダR 003の下にファイルが存在する-R 003----R 003.h ----R003.cpp ----main.cpp
1、ヘッダファイル:R 003.h
2、ソースファイル:R 003.cpp
3、テストファイルを呼び出す:main.cpp
コンパイルと呼び出し
1、ダイナミックリンクライブラリの生成
上の2つはマージできます
2、コンパイルコール生成の動的ライブラリ
命令ldd mainでmain依存項目を表示できます
3、環境変数パスの追加
4、運転
サードパーティ製ライブラリ(opencv)に依存するダイナミックリンクライブラリのコンパイル
コードとファイルフォーマット
フォルダR 003 opencvの下にファイルが存在する-R 003----R 003.h ----R003.cpp ----main.cpp ----0.jpg
1、ヘッダファイル:R 003.h
2、ソースファイル:R 003.cpp
3、テストファイルを呼び出す:main.cpp
コンパイルと呼び出し
1、OpenCVのpkgを追加するconfigからパーソナル環境変数は、一般的に/usr/local/lib/x 86_などのインストールパスの下にあります.64-linux-gnu/pkgconfig/在.barshrcに追加:
追加完了後の記憶
2、コンパイル生成ダイナミックライブラリ
3、コンパイルコール生成の動的ライブラリ
3、環境変数パスの追加(ldd mainでmainの依存項目を表示できます.先ほど生成したlibR 003.soが見つからない場合は、現在の.soが存在するフォルダを環境変数に追加します)
追加完了後の記憶
4、実行./main
コードとファイルフォーマット
フォルダR 003の下にファイルが存在する-R 003----R 003.h ----R003.cpp ----main.cpp
1、ヘッダファイル:R 003.h
#ifndef R003_H_
#define R003_H_
extern "C"
int IF_Security_DLL(const char* ConfigInform, const char* ConfigPath, char*& ConfigCode);
void Free_ConfigCode_IF_R009(char **rec_result_pureC);
#endif
2、ソースファイル:R 003.cpp
#include "R003.h"
#include
#include
#include
int IF_Security_DLL(const char* ConfigInform, const char* ConfigPath, char*& ConfigCode)
{
std::string Inform = ConfigInform;
std::string Path = ConfigPath;
std::string Code = "";
std::cout << Path.substr(Path.length() - 4, 4) << std::endl;
std::cout << Inform.substr(Inform.length() - 5, 5) << std::endl;
if (Path.substr(Path.length() - 4, 4) == "Path"&&Inform.substr(Inform.length() - 5, 5) == "IFSSC")
{
Code = Code + Inform + Path;
}
else
{
return 1;
}
int len = Code.length();
std::cout << len << std::endl;
char * codeout = (char *)malloc((len + 1) * sizeof(char));
//rec_result_pureC_tmp = (char *)malloc(sizeof(char)*len+1);
memset(codeout, 0, len + 1);
Code.copy(codeout, len);
ConfigCode = codeout;
return 0;
}
void Free_ConfigCode_IF_R009(char **rec_result_pureC)
{
if (*rec_result_pureC != NULL)
{
free(*rec_result_pureC);
*rec_result_pureC = NULL;
}
return;
}
3、テストファイルを呼び出す:main.cpp
#define _CRT_SECURE_NO_WARNINGS
#include "R003.h"
#include
#include
int main()
{
const char* ConfigInform = "yiqundoushishabi_IFSSC";
const char* ConfigPath = "yiqundoushishabi_Path";
char* ConfigCode;
int flag = IF_Security_DLL(ConfigInform, ConfigPath, ConfigCode);
std::cout << strlen(ConfigCode) << std::endl;
for (int i = 0; i < strlen(ConfigCode); i++)
{
std::cout << ConfigCode[i];
}
Free_ConfigCode_IF_R009(&ConfigCode);
return 0;
}
コンパイルと呼び出し
1、ダイナミックリンクライブラリの生成
g++ -Wall -g -fPIC -c R003.cpp -o R003.o
g++ -shared R003.o -o libR003.so
上の2つはマージできます
g++ -Wall -g -fPIC -c R003.cpp -shared -o libR003.so
2、コンパイルコール生成の動的ライブラリ
g++ -o main main.cpp -L. -lR003
命令ldd mainでmain依存項目を表示できます
3、環境変数パスの追加
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home1/dc/dcstuff/CplusCompile/R003/
4、運転
./main
サードパーティ製ライブラリ(opencv)に依存するダイナミックリンクライブラリのコンパイル
コードとファイルフォーマット
フォルダR 003 opencvの下にファイルが存在する-R 003----R 003.h ----R003.cpp ----main.cpp ----0.jpg
1、ヘッダファイル:R 003.h
#ifndef R003_H_
#define R003_H_
#include
extern "C"
int IF_Security_DLL(const char* ConfigInform, const char* ConfigPath, char*& ConfigCode);
void Free_ConfigCode_IF_R009(char **rec_result_pureC);
void getimage(cv::Mat image);
#endif
2、ソースファイル:R 003.cpp
#include "R003.h"
#include
#include
#include
#include
int IF_Security_DLL(const char* ConfigInform, const char* ConfigPath, char*& ConfigCode)
{
std::string Inform = ConfigInform;
std::string Path = ConfigPath;
std::string Code = "";
std::cout << Path.substr(Path.length() - 4, 4) << std::endl;
std::cout << Inform.substr(Inform.length() - 5, 5) << std::endl;
if (Path.substr(Path.length() - 4, 4) == "Path"&&Inform.substr(Inform.length() - 5, 5) == "IFSSC")
{
Code = Code + Inform + Path;
}
else
{
return 1;
}
int len = Code.length();
std::cout << len << std::endl;
char * codeout = (char *)malloc((len + 1) * sizeof(char));
//rec_result_pureC_tmp = (char *)malloc(sizeof(char)*len+1);
memset(codeout, 0, len + 1);
Code.copy(codeout, len);
ConfigCode = codeout;
return 0;
}
void Free_ConfigCode_IF_R009(char **rec_result_pureC)
{
if (*rec_result_pureC != NULL)
{
free(*rec_result_pureC);
*rec_result_pureC = NULL;
}
return;
}
void getimage(cv::Mat image)
{
cv::imwrite("1.jpg",image);
}
3、テストファイルを呼び出す:main.cpp
#define _CRT_SECURE_NO_WARNINGS
#include "R003.h"
#include
#include
int main()
{
const char* ConfigInform = "yiqundoushishabi_IFSSC";
const char* ConfigPath = "yiqundoushishabi_Path";
char* ConfigCode;
int flag = IF_Security_DLL(ConfigInform, ConfigPath, ConfigCode);
std::cout << strlen(ConfigCode) << std::endl;
for (int i = 0; i < strlen(ConfigCode); i++)
{
std::cout << ConfigCode[i];
}
Free_ConfigCode_IF_R009(&ConfigCode);
cv::Mat image = cv::imread("0.jpg");
getimage(image);
return 0;
}
コンパイルと呼び出し
1、OpenCVのpkgを追加するconfigからパーソナル環境変数は、一般的に/usr/local/lib/x 86_などのインストールパスの下にあります.64-linux-gnu/pkgconfig/在.barshrcに追加:
export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/x86_64-linux-gnu/pkgconfig
追加完了後の記憶
source ~/.barshrc
2、コンパイル生成ダイナミックライブラリ
g++ -Wall -g -fPIC -c R003.cpp $(pkg-config --cflags --libs opencv) -shared -o libR003.so
3、コンパイルコール生成の動的ライブラリ
g++ -o main main.cpp $(pkg-config --cflags --libs opencv) -L. -lR003
3、環境変数パスの追加(ldd mainでmainの依存項目を表示できます.先ほど生成したlibR 003.soが見つからない場合は、現在の.soが存在するフォルダを環境変数に追加します)
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home1/dc/dcstuff/CplusCompile/R003/
追加完了後の記憶
source ~/.barshrc
4、実行./main