『壹』 怎麼用Qt Creator編寫JNI的so動態庫供安卓java開發者使用
這種情況可以通過代碼目的JNI去調用,在JNI中導入頭文件,通過NDK編譯成功後即可。學習java推薦千鋒教育,該機構坐擁國內頂級的教師團隊,每年培養眾多學子,值得託付和信賴。
Java語言基礎數據類型有兩種:對象和基本類型(Primitives)。Java通過強制使用靜態類型來確保類型安全,要求每個變數在使用之前必須先聲明。這種機制和非靜態類型的語言有很大差別,非靜態語言不要求對變數進行聲明。雖然顯式類型聲明看起來較繁瑣,但其有助於編譯器對很多編程錯誤的預防,例如,由於變數名拼寫錯誤導致創建了沒有用的變數,調用了不存在的方法等。顯式聲明可以徹底防止這些錯誤被生成到運行代碼中。
想要了解更多有關java開發的相關信息,推薦咨詢千鋒教育。千鋒企業合作部於2013年成立,主要針對企業用人需求和學員職業規劃進行服務。經過8年發展,企業合作部已經成為千鋒連接企業和學員的重要紐帶。服務面對企業建立全方位、立體化、遍布全國的企業合作網路,覆蓋全國一線二線城市大中小型公司,成功幫助20000餘名人才實現就業,合作企業達20000餘家,每年簽訂1000餘份人才培養訂單,讓廣大學員沒有後顧之憂。
『貳』 如何用qt在linux中編寫並使用動態鏈接庫
先寫好實現動態鏈接庫的libmy.cpp文件和libmy.h文件,如下:
// libmy.cpp
#include"libmy.h"
#include<iostream>
using namespace std;
MyLib::MyLib()
{
}
MyLib::~MyLib()
{
}
void MyLib::hello()
{
cout << "hello world~!" << endl;
}
// libmy.h文件
#ifndef LIBMY_H
#define LIBMY_H
class MyLib
{
public:
MyLib();
~MyLib();
void hello();
};
#endif /*LIBMY_H*/
然後寫好pro文件,如下:
TEMPLATE = lib
TARGET =DllTest
HEADERS += libmy.h
SOURCES += libmy.cpp
保存關閉,文件名命名為MyDll.pro
在Shell里執行qmake MyDll.pro,在沒有錯誤的情況下,然後執行make ,可以看到生成了幾個後綴名為so的文件,如下圖:
『叄』 如何用Qt調用matlab生成的動態庫
動態庫的生成
1>首先生成目標文件,但是此時要加編譯器選項-fpic和鏈接器選項-shared,
gcc -fpic -c add.c
gcc -fpic -c sub.c
生成中間文件add.o和sub.o
2>其次生成動態庫
gcc -shared –o libtiger.so add.o sub.o
生成動態庫libtiger.so,libtiger.so就是我們生成的目標動態庫。我們以後使用動態庫和main.c程序生成可執行程序
說明:
以上兩部也可以合成一步搞定:
gcc -fpic -shared add.c sub.c -o libtiger.so
2.使用動態鏈接庫
在編譯程序時,使用動態鏈接庫和靜態庫是一致的,使用」-l庫名」的方式,在生成可執行文件的時候會鏈接庫文件。
1>使用命令:
gcc -o main main.c -L ./ -ltiger
2>-L指定動態鏈接庫的路勁,-ldtiger鏈接庫函數tiger。-ltiger是動態庫的調用規則。Linux系統下的動態庫命名方式是lib*.so,而在鏈接時表示位-l*,*是自己命名的庫名。
3>但是程序會提示如下錯誤
error while loading shared libraries: libtiger.so: cannot open shared object file: No such file or direct
這是因為程序運行時沒有找到動態鏈接庫造成的。程序編譯時鏈接動態庫和運行時使用動態鏈接庫的概念是不同的,在運行時,程序鏈接的動態鏈接庫需要在系統目錄下才行。
4>使用以下方法可以解決此問題
a. 在linux下最方便的解決方案是拷貝libtiger.so到絕對目錄 /lib 下(但是,要是超級用戶才可以,因此要使用sudo哦,親)。就可以生成可執行程序了
b.第二種方法是:將動態鏈接庫的目錄放到程序搜索路徑中,可以將庫的路徑加到環境變數LD_LIBRARY_PATH中實現:
export LD_LIBRARY_PATH=`pwd`:$LD_LIBRARY_PATH
『肆』 C++ 一個常識問題
你這是QT的源碼吧,Q_CORE_EXPORT 其實是一個宏,用來說明這是一個動態庫導出類。QT是個跨平台的庫,而不同的操作系統,不同的編譯器,對動態庫的導出說明是不一樣的,比如,在windows編譯器上,動態庫的導出說明通常是這樣的:
__declspec((dllexport))
而在gcc/g++等編譯器上,動態庫的導出說明通常是這樣的:
__attribute__ ((visibility(" <type> ")),其中,type可能是default,hidden,internal等,用來說明此導出符號在ELF文件中的可見性。
所以,綜上,Q_CORE_EXPORT是一個用來適應不同平台的用來說明這是一個動態庫導出類的宏。它具體是怎麼定義的,可以在QT源代碼中查看。
『伍』 Qt下如何編譯庫
一般分為動態庫和靜態庫,方法分別如下:
一.
靜態庫的生成
1.
測試目錄:
lib
2.
源碼文件名:
mywindow.h,
mywindow.cpp
3.
編寫項目文件:
mywindow.pro
注意兩點:
TEMPLATE
=
lib
CONFIG
+=
staticlib
4.
生成Makefile:
qmake
mywindow.pro
5.
編譯生成靜態庫libmywindow.a
make
二.
靜態庫的使用
1.
測試目錄:
test
2.
將mywindow.h與libmywindow.a拷貝至test目錄下
3.
編寫main.cpp,
包含頭文件mywindow.h,
並調用MyWindow類
4.
編寫項目文件:
test.pro
注意加上庫路徑與庫文件名:
LIBS
+=
-L
./
-lmywindow
5.
生成Makefile:
qmake
test.pro
6.
編譯:
make
7.
運行:
./test
三.
動態庫的生成
動態庫編譯基本和靜態庫類似,需要將上述將要進行編譯的項目文件.pro中下面這行去掉
CONFIG
+=
staticlib
按上述操作編譯完後就可以得到以lib開頭並且.so*
結尾動態庫文件,一般有多個。
『陸』 qt中怎樣使用c語言編寫成動態庫
receive =new QPushButton("receive",this);
receive->setGeometry(700, 300, 80, 30);//第一個參數,橫坐標的其實
//位置,第二個總坐標的其實位置,第三個為寬度,第四個為高度
『柒』 如何用Qt調用matlab生成的動態庫
先寫好實現動態鏈接庫的libmy.cpp文件和libmy.h文件,如下://libmy.cpp#include"libmy.h" #includeusingnamespacestd;MyLib::MyLib() { }MyLib::~MyLib() { } voidMyLib::hello() { coutusingnamespacestd;intmain(intargc,char*argv[]) { MyLib*lib=newMyLib(); //調用剛才編寫的動態鏈接庫 lib->hello(); cout>i; return1; }編寫main.pro文件,如下:LIBS+=-L./ #設置程序查找動態庫的目錄為當前目錄 #注意:用QT生成的動態庫默認都加了lib前綴和擴展名及版本名,但調用時不用加lib,不用加文件#擴展名so、不用加版本名1.0.0.即下面LIBS中的DllTest就是實際的動態庫libDllTest.so.1.0.0LIBS+=-lDllTest #注意:調用時不用加lib,不用加文件擴展名so、不用加版本名1.0.0,記得前面加l(字母)TARGET=libMyTest SOURCES+=main.cpp執行qmakemain.pro生成makefile文件,然後執行make,可以看到生成了libMyTest可執行文件。將動態鏈接庫libDllTest.so.1.0.0和可執行文件傳到arm板上,如下: 在arm板上執行libMyTest,如下:#chmod+x libMyTest //先賦予可執行許可權執行:# ./libMyTest 輸出如下: