Qt呼叫VS生成的C靜態庫
在vs2010中新建工程,在嚮導中選擇DLL,如下圖所示:
新建兩個檔案mydll.h和mydll.c
mydll.h程式碼如下:
1 #ifndef MYDLL_H 2 #define MYDLL_H 3 #ifdef __cplusplus // 4 extern "C"{ 5 #endif 6 __declspec(dllexport) int myFun(int a,int b); 7 8 #ifdef __cplusplus 9 } 10 #endif 11 12 #endif
mydll.c程式碼如下:
1 #include "mydll.h" 2 #include <stdio.h> 34 int myFun(int a,int b) 5 { 6 printf("myFun is called"); 7 8 return a+b; 9 }
編譯執行,在Debug目錄下可看到下述檔案:
2.在Qt中呼叫dll和lib庫
新建Qt工程LibTest2,將mydll.h檔案新增到當前工程中;將mydll.lib和mydll.dll檔案複製到工程所在目錄;
在LibTest2.pro右鍵匯入外部庫,引數選項如下圖所示:
在mainwindow.cpp中包含“mydll.h”
在建構函式中新增下述程式碼:
int test; test = myFun(33,33); qDebug()<<test;
編譯執行,結果如下:
可以看到C靜態庫已被呼叫。
相關推薦
Qt呼叫VS生成的C靜態庫
1,生成dll和lib庫 在vs2010中新建工程,在嚮導中選擇DLL,如下圖所示: 新建兩個檔案mydll.h和mydll.c mydll.h程式碼如下: 1 #ifndef MYDLL_H 2 #define MYDLL_H 3 #ifdef __cpluspl
android studio 利用gradle和cmakelist生成c++靜態庫.a的方法總結
nts 需求 roi ++ build mat 頭文件 方法 ext android生成靜態庫的方法有兩種,一種是編輯android.mk文件,一種是編輯cmakelist文件。前一種沒做研究,因為用的ide是android studio,所以直接利用gradle調用cma
QT呼叫VS生成的DLL(無標頭檔案)
目錄 一、準備知識 1.1QT呼叫DLL的兩種常見方法簡介 呼叫說明:關於QT呼叫DLL方法主要分兩種,一種是顯示呼叫,另一種是隱式呼叫。 宣告: 事先我已經自己動手寫了一個簡單的dll檔案(myDLL.dll),C版介面的。首
C語言呼叫GO語言生成的C靜態庫
一開始看別人的例子,自己弄總是不成功,後來也是去GO語言社群看多幾個例子,找找規律,才把幾個自己沒注意到的細(keng)節填起來了。 GO語言寫一個函式 cktest.go package main import ( "C" "fmt" ) //exp
vs C++ 靜態庫 生成以及使用的兩種方法
C++靜態庫的生成 1、 vs專案配置:選擇 靜態庫 2、 新建標頭檔案 add.h 3、 新建標頭檔案 add.cpp 4、 執行“生成解決方案”,工程DEBUG目錄如下: C++靜態庫的使用 方法一 1、 新建 win32控制檯應用程式 2、 專案屬性-->c/c
Golang 通過 cgo 呼叫 C/C++ 靜態庫(二)
書接上回 C 呼叫 C++ 類 Golang 通過 cgo 呼叫 C/C++ 靜態庫(一) 如果想使用 golang 呼叫 C++ 程式碼該如何做? 我們知道,golang 無法直接呼叫 C++,但是可以呼叫 C,所以我們需要用 C 包裝下
Golang 通過 cgo 呼叫 C/C++ 靜態庫(一)
hello.h #ifndef HELLO_H_ #define HELLO_H_ #ifdef __cplusplus extern "C" { #endif extern int hello(char *name, int age); #ifdef __cplusplus
Go 生成C動態庫.so和靜態庫.a
Go 生成C動態庫.so和靜態庫.a 原始碼 package main import "C" import "fmt" //export hello func hello(){ fmt.Println("hello world") } //export add func
android studio 3.2 使用cmake在jni生成及使用C/C++靜態庫
關於cmake jni的基本教程可以看我另外一篇部落格 關於使用動態庫可以看我的另外一篇部落格。 在看本篇之前,最好先看這篇動態庫的,一些比較基本的操作,都在這裡面。本篇不會講的很細。 總體思路 1.本教程是在Android studio中利用cmake來生成
VS中C++靜態/動態庫檔案的編譯除錯與使用
基礎知識:不同語言之間可以通過呼叫動態連結庫 (dll)來呼叫別人寫好的函式同一語言可以呼叫別人寫好的靜態(lib)庫靜態連結庫:是通過靜態聯編的,在連結時,link將自己的(.obj)二進位制檔案和別人的lib檔案一起共同生成.exe檔案。 靜態連結庫的缺點是: 1)比較
C呼叫C++靜態庫的方法
遠比想象中的簡單,其實就是兩點: 1.為C++風格的介面做一個wrapper,利用extern “C”。 2.編譯選項中加上-lstdc++ 比如說有一個庫是這樣的: ClassA.h: [c] class A { private: int x; public: A(int _x);
不同版本VS生成的動態庫是否可以相互呼叫?
結論:只要.net framework版本一致VS2008和VS2017生成的DLL可以相互呼叫。 1.在VS2008中生成DLL檔案 分別生成DEBUG模式的DLL和RELEASE模式的DLL。一般而言,DEBUG的DLL要比RELEASE的DLL所佔
C++靜態庫與動態庫、建立及呼叫方法
1 什麼是庫 庫是寫好的現有的,成熟的,可以複用的程式碼。現實中每個程式都要依賴很多基礎的底層庫,不可能每個人的程式碼都從零開始,因此庫的存在意義非同尋常。本質上來說庫是一種可執行程式碼的二進位制形式,可以被作業系統載入記憶體執行。庫有兩種:靜態庫(.a、.lib)和動態
C++靜態庫編譯
opencv ng- res tracking mic gdi end jasper debug模式 MFC 選項選擇: 靜態庫編譯 增加頭文件:( opencv相關的) #pragma once #ifdef WIN32 #include <open
C/C++靜態庫連結原理
前面我們學習了編譯連結的一些知識,現在來看看靜態庫連結的一些知識~ 靜態庫本質上就是使用ar命令打包一堆.o檔案: $ ar -r test.a myObj1.o myObj2.o 靜態庫沒有標準,不同的linux下都會有些細微的差別。大致的格式: Glo
GO語言生成C動態庫,再被連結成新動態庫
目錄 目標 測試程式碼 編譯步驟 GO ----> 動態庫 再封裝成新動態庫 編譯生成可執行檔案 嘗試GO---->C靜態庫---->C動態庫。 目標 如果想把GO語言實現的功能整合到C固定介面上,中間需要多加一次封裝。 因為很難用GO直
fw:C靜態庫連線的順序問題
C靜態庫連線的順序問題 C語言的靜態連線,簡單的說就是將編譯得到的目標檔案.o(.obj),打包在一起,並修改目標檔案中函式呼叫地址偏移量的過程。當在大一點的專案中,可能會遇到連線時,由於靜態庫在連結器命令列中出現順序的問題,造成undefined reference錯誤。本文深入探
C++靜態庫與動態庫
name mangling可以通過extern "C"解決。C++有個特定的關鍵字用來宣告採用C binding的函式:extern "C" 。用 extern "C"宣告的函式將使用函式名作符號名,就像C函式一樣。因此,只有非成員函式才能被宣告為extern "C",並且不能被過載。儘管限制多多,exter
Linux C 靜態庫和動態庫
這次分享的宗旨是——讓大家學會建立與使用靜態庫、動態庫,知道靜態庫與動態庫的區別,知道使用的時候如何選擇。這裡不深入介紹靜態庫、動態庫的底層格式,記憶體佈局等,有興趣的同學,推薦一本書《程式設計師的自我
c靜態庫建立 與 指令碼檔案靜態庫建立 的區別
一,c靜態庫的建立 1,建立兩個.c檔案 例: vim 1.c //第一個子檔案 #include<stdio.h> int add(int x,int y) { return x+y; } vim 2.c //第二個子檔案 #include<stdio.h> i