[英]creating C++ dynamic library which uses opencv in linux
我正在嘗試通過使用opencv和tesseract與動態鏈接的程序在linux中創建共享庫
我點擊了鏈接我的代碼如下
g++ -c Serial_Key.cpp -fPIC -o cdserial `pkg-config --cflags --libs opencv` -llept -ltesseract
g++ -shared -Wl,-soname,libctest.so.1 -o libctest.so.1.0 cdserial
ln -sf libctest.so.1.0 libctest.so
ln -sf libctest.so.1.0 libctest.so.1
g++ -c Test.cpp -fPIC -o cprog -lctest `pkg-config --cflags --libs opencv` -llept -ltesseract
這里的Test.cpp是一個簡單的文件,如下所示
#include <stdio.h>
int Serial_key();
int main(){
int x=Serial_key();
printf("Success");
return 0;}
以某種方式將其作為./cprog的給定錯誤為./cprog:無法執行二進制文件:Exec格式錯誤
我覺得我在第二行(g ++ -shared)犯了一些基本錯誤,請指導
經過更多的頭部仰卧起坐后,我發現上述問題中存在一些愚蠢的錯誤
這是針對可能陷入類似問題的其他人的更正流程
第一次編譯
g ++ -c Serial_Key.cpp -fPIC -o cdserial
通過使用soname提及庫及其路徑來創建共享庫
g ++ -shared -Wl,-soname,libctest.so.1 -o libctest.so.1.0 cdserial -lopencv_highgui -lopencv_imgproc -lopencv_core -lopencv_imgcodecs -lopencv_videoio -llept -ltesseract -L / usr / local / lib
將soname與庫鏈接
ln -sf libctest.so.1.0 libctest.so ln -sf libctest.so.1.0 libctest.so.1
編譯並創建測試文件的對象
g ++ Test.cpp -fPIC -o cprog -lctest -lopencv_highgui -lopencv_imgproc -lopencv_core -lopencv_imgcodecs -lopencv_videoio -llept -ltesseract -L / usr / local / lib
將共享庫文件復制到本地庫
cp libctest.so / usr / local / lib cp libctest.so.1 / usr / local / lib cp libctest.so.1.0 / usr / local / lib
確保$ LD_LIBRARY_PATH指向共享庫路徑
導出LD_LIBRARY_PATH = / usr / local / lib
跑
./cprog
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.