1. 程式人生 > >Qt呼叫VS生成的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 __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>
3
4 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來生成

VSC++靜態/動態檔案的編譯除錯與使用

基礎知識:不同語言之間可以通過呼叫動態連結庫 (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