linux c/c++外掛技術:動態連結庫
//---------- //main.cpp: //---------- #include "polygon.hpp" #include <iostream> #include <dlfcn.h> int main() { using std::cout; using std::cerr; // load the triangle library void* triangle = dlopen("./triangle.so", RTLD_LAZY); if (!triangle) { cerr << "Cannot load library: " << dlerror() << '\n'; return 1; } // reset errors dlerror(); // load the symbols create_t* create_triangle = (create_t*) dlsym(triangle, "create"); const char* dlsym_error = dlerror(); if (dlsym_error) { cerr << "Cannot load symbol create: " << dlsym_error << '\n'; return 1; } destroy_t* destroy_triangle = (destroy_t*) dlsym(triangle, "destroy"); dlsym_error = dlerror(); if (dlsym_error) { cerr << "Cannot load symbol destroy: " << dlsym_error << '\n'; return 1; } // create an instance of the class polygon* poly = create_triangle(); // use the class poly->set_side_length(7); cout << "The area is: " << poly->area() << '\n'; // destroy the class destroy_triangle(poly); // unload the triangle library dlclose(triangle); } //---------- //polygon.hpp: //---------- #ifndef POLYGON_HPP #define POLYGON_HPP class polygon { protected: double side_length_; public: polygon() : side_length_(0) {} virtual ~polygon() {} void set_side_length(double side_length) { side_length_ = side_length; } virtual double area() const = 0; }; // the types of the class factories typedef polygon* create_t(); typedef void destroy_t(polygon*); #endif //---------- //triangle.cpp: //---------- #include "polygon.hpp" #include <cmath> class triangle : public polygon { public: virtual double area() const { return side_length_ * side_length_ * sqrt(3) / 2; } }; // the class factories extern "C" polygon* create() { return new triangle; } extern "C" void destroy(polygon* p) { delete p; }
注意事項:
相關推薦
linux c/c++外掛技術:動態連結庫
//---------- //main.cpp: //---------- #include "polygon.hpp" #include <iostream> #include <dlfcn.h> int main() { using std::cout; usin
C++ 打包並呼叫動態連結庫 (VS2010)
相比於原始碼,動態連結庫使用起來更加方便簡潔,而且可以對原始碼起到保護作用。 生成動態連結庫 我們以vs2010為例,生成一個動態連結庫,首先在VS2010中新建一個專案,選擇“Win32控制檯應用程式“或“Win32專案”都是可以,只要在“應用程式設定”中
java呼叫C/C++生成的dll動態連結庫----藉助JNI
由於專案的需要,最近研究了java 呼叫DLL的方法,將如何呼叫的寫於此,便於日後查閱: 採用的方法是JNI:Java Native Interface,簡稱JNI,是Java平臺的一部分,可用於讓Java和其他語言編寫的程式碼進行互動。 下面是從網上摘取的JNI工作示意圖: 總體說明:先在JA
LuaLaTeX呼叫外部Lua程式與C語言編寫的動態連結庫
在LuaLaTeX編譯方式下,雖然可以直接在tex檔案中編寫Lua程式碼,但會受到LaTeX的影響,編寫中並不是很便利。所以我在實際使用中一般都把Lua程式碼的主體部分放在LaTeX的外部,這樣可以完全按照以往的程式設計習慣去編寫。我以前所在的公司,曾經在機器人運動控制系統中使用過Lua
C#編寫和呼叫動態連結庫
3705.288--dll檔案是你伺服器端指令碼編譯後生成的元件,也就是說一但編譯成dll後,軟體發行後,你對應頁面的伺服器端指令碼檔案.aspx.cs就不需要釋出了,因為程式碼已經封裝在工程名.dll檔案裡了.而.pdb檔案據我理解,可能是帶上了一些資源類的檔案吧,所以檔案要比相應的dll檔案大,至於你說的
vs2010 C++建立和使用動態連結庫(dll)
一、用C++建立動態連結庫專案: 1、開啟Microsoft Visual Studio 2010,選擇File->New->Project。 2、在NewProject中選擇Inst
Linux下執行時呼叫動態連結庫.so的三種方法(筆記)
在/etc/ld.so.conf.d/下建立xxx.conf,在文字中加入.so所在路徑,如:/usr/xxx等等,然後使用相應ldconfig命令使之生效。 將.so所在路徑新增為LD_LIBRARY_PATH環境變數。 在編譯命令中使用-Wl,-rpath
Linux下使用cmake生成動態連結庫並使用
使用cmake生成庫主要要注意三個資料夾 (1)原始檔資料夾(2)中間資料夾(編譯生成的.o等檔案的資料夾)(3)安裝資料夾(最終可用的庫所在的資料夾) 使用庫的步驟(1)在工程檔案中包括庫函式的標頭檔案(可為絕對路徑,也可配置全域性環境變數用相對路徑)(2)在CMakeLists.txt或整合開發環境中
Linux下gcc編譯生成動態連結庫*.so檔案並呼叫它
動態庫*.so在linux下用c和c++程式設計時經常會碰到,最近在網站找了幾篇文章介紹動態庫的編譯和連結,總算搞懂了這個之前一直不太瞭解得東東,這裡做個筆記,也為其它正為動態庫連結庫而苦惱的兄弟們提供一點幫助。1、動態庫的編譯下面通過一個例子來介紹如何生成一個動態庫。這裡
linux下gcc編譯 .c檔案生成動態連結庫 .so檔案,並測試呼叫該連結庫
簡單介紹:linux中so檔案為共享庫,和windows下dll相似;so可以共多個程序呼叫,不同程序呼叫同一個so檔案,所使用so檔案不同;so原檔案不需要main函式;例項,1.通過mysqlTest.c中的函式mysql(),生成一個libmysql.so連結庫#inc
python中呼叫動態連結庫(C++,linux)
1,建立並編譯C++程式 #include <fstream> #include <assert.h> #include <malloc.h> #incl
Linux下c++呼叫自己編寫的matlab函式:通過mcc動態連結庫.so實現
之前在這裡和這裡呼叫了matlab自帶的一些函式,是通過matlab引擎來實現的。那裡呼叫的是matlab自帶的函式,那麼如果想呼叫自己寫的.m函式該怎麼辦呢?其實很簡單,原理類似,方法也不止一種。這篇筆記我先嚐試通過mcc將.m函式編譯成動態連結庫供c++呼叫的方式。在另
Linux-(C/C++)動態連結庫生成以及使用(libxxx.so)
Linux中so檔案為共享庫,與windows下dll類似,不過實現要簡單。 so可以供多個程序使用,不同程序呼叫同一個so檔案,所使用so檔案不同。 so檔案源程式不需要main函式,有也不會被執行。 下面通過一個簡單例子,來學習.so檔案的製作跟使用(前提已經配置好環
Linux下動態連結庫的建立和使用及C呼叫matlab動態庫問題
其實這個資料網路上已經很多了,但是還是有一些細節讓我搗鼓了很久,以及最近在做matlab mcc做成so檔案供給c++呼叫的時候的一些問題。 一、首先如何製作Linux下的so 檔案 【1】http://bbs.chinaunix.net/thread-1281954-1-
Linux環境下使用eclipse開發C++動態連結庫程式
Linux中也有類似windows中DLL的變成方法,只不過名稱不同而已。在Linux中,動態連結叫做Standard Object,生成的動態連結檔案為*.so。詳細請參考相關文件。 開發環境:Eclipse 3.4.2 G++:4.3.2 1. 建立動態連結庫
【C++】linux下CMake生成動態連結庫,g++包含生成動態連結庫
一、前言 由於專案中要用到java呼叫C++的庫檔案,於是需要在linux下編譯連線生成動態庫,然後根據Recast官方包要先CMake生成編譯,然後在包含到自己實現的檔案,網上查了半天,坑爹沒有全面的,東拼西湊終於才明白原理,於是總結記錄分享如下。 二、CMake生
C語言函式庫:動態連結庫與靜態連結庫
首先,函式庫就是一些事先寫好的函式的集合,是別人分享的,我們可以拿來使用的。經過一些校準和整理,就形成一份標準化的函式庫。例如glibc 函式庫有兩種提供形式:動態連結庫與靜態連結庫 早起函式庫裡的函式都是直接共享的,就是所謂的開源社群。後來函式庫商業化,就出現了靜態連結庫與動態連結庫。
python中呼叫 C#動態連結庫問題記錄
程式[摘自https://blog.csdn.net/LTG01/article/details/80700513] import clr clr.FindAssembly("PythonNetTest.dll") ## 載入c#dll檔案 from PythonNetTest import *
使用Netbeans編譯C++檔案,動態連結庫的方法
一鍵執行時會出現類似於下面的錯誤: Undefined symbols for architecture x86_64: "___gmp_printf", referenced from: _main in main.o "_
C#生成/呼叫動態連結庫
參考地址:https://www.cnblogs.com/qq4004229/archive/2013/01/30/2882409.html 一、需求描述 (1)用程式碼生成動態連結庫 (2)用C#程式碼呼叫動態連結庫 二、生成動態連結庫 (