mysql.h 動態編譯命令_Linux環境編譯動態庫和靜態庫總結

對Linux環境動態庫和靜態庫的一些基礎知識做一些總結,

首先總結靜態庫的編譯步驟。

1 先基于.cpp或者.c文件生成對應的.o文件

2將幾個.o文件 使用ar -cr命令 生成libname.a文件

libname.a 為靜態庫, name 為靜態庫的名字,

可以根據模塊功能命名。

舉個例子

在當前目錄下,有一個mymethod.h文件

c7c0e70026ceebb9a780477e7e4d91e8.png

在mymethod.cpp里實現這兩個函數

89771eddbe760860ab1a1e1871631694.png

在當前目錄下有一個main.cpp文件

dc1c4f069838cc1ad5588d9894ccf1f0.png

為了方便使用,將mymethod.cpp封裝成靜態庫和動態庫

首先將mymethod.cpp 編譯成目標文件

g++ -c mymethod.cpp -o mymethod.o

然后根據目標文件生成靜態庫

ar -cr libmymethod.a mymethod.o

ar命令可以用來創建、修改庫,也可以從庫中提出單個模塊

-c 選項表示 創建一個庫。不管庫是否存在,都將創建

-r 選項表示 將模塊插入庫,如果庫中有對應的模塊,那么進行更新

如果把多個.o文件插入庫.a里,只需要在后面用空格分開寫出來

格式

ar -cr 靜態庫libname.a ?name1.o name2.o

靜態庫的命名有規則,格式為lib+庫名+.a

生成靜態庫libmymethod.a后,

編譯main.cpp 連接靜態庫生成可執行文件main

g++ main.cpp -o main -I ./ -L ./ -lmymethod

-I選項表示頭文件路徑

-L表示靜態庫或者動態庫的路徑

鏈接靜態庫寫成 -l庫名即可:-lmymethod

運行./main 可以輸出結果

28fe3eca01c7e244a0930771670364fa.png

下面是動態庫的編譯

動態庫的命名是lib+庫名+.so

動態庫需要使用-shared 選項以及-fPIC選項

g++ -c -fPIC mymethod.cpp -o mymethod.o

-fPIC表示代碼是和地址無關的,不需要被不同模塊重定位

然后根據目標文件生成動態庫.so文件

g++ -shared -o libmymethodso.so mymethod.o

-shared 選項表示生成的是.so動態庫文件

下一步是鏈接動態庫

g++ main.cpp -o main -I ./ -L ./ -lmymethodso

此時不能直接運行./main否則會提示找不到對應的動態庫

上面的步驟可以直接寫成一句話

g++ -shared -fPIC mymethod.cpp -o libmymethodso.so

我們現在有幾種方式配置動態庫的路徑

第一種

export LD_LIBRARY_PATH="./:$LD_LIBRARY_PATH"

這種方式將動態庫路徑配置到LD_LIBRARY_PATH,只是暫時生效

第二種

使用 ldconfig 機制(需 root 權限):

● 首先,在 /etc/ld.so.conf.d/ 下創建一個 .conf 文件,

如 libmymethod.conf ,內容為共享庫所在目錄的絕對路徑

● 然后,運行 ldconfig

第一種比較簡單,配置好后可以直接運行./main

第二種按照操作進入/etc/ld.so.conf.d/,

然后創建mymethod.conf

9a31decbf364de02a849929cee083993.png

用vi打開mymethod.conf,添加動態庫的絕對路徑

/home/secondtonone/soando

最后運行ldconfig, 即可生效了。

這樣就可以運行./main

現在對動態庫路徑配置做一個總結

解決共享庫路徑問題

gcc/g++ 編譯期 :

● 使用 -L 選項指定所需鏈接的共享庫所在目錄(如果共享庫或其連

接文件位于 /usr/lib 、 /usr/local/lib 或由 LD_LIBRARY_PATH 指定

的目錄下,則不需指定該選項)

● 使用 -l 選項指定所需鏈接的共享庫名稱(無前綴、后綴)

程序運行期:

● 使用 LD_LIBRARY_PATH 環境變量來指定所需引用的共享庫所在

目錄 ( 臨時指定或永久性寫入相關文件,普遍適用于 UNIX 世界 )

● 使用 ldconfig 機制(需 root 權限):

● 首先,在 /etc/ld.so.conf.d/ 下創建一個 .conf 文件,

如 libmymethod.conf ,內容為共享庫所在目錄的絕對路徑

● 然后,運行 ldconfig

我的公眾號,謝謝關注下。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/534615.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/534615.shtml
英文地址,請注明出處:http://en.pswp.cn/news/534615.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

netbeans java中文_Ubuntu?下jdk安裝中文字體?java?解決netbeans?方塊字?中文亂碼

安裝環境Ubuntu 11.04、javajdk1.6.0_27首先找到你需要的字體,比如我就是從windows系統里拷出來的,C:\WINDOWS\Fonts這里有很多字體,我只拷貝了simsun.ttc(中文 宋體,從xp系統拷貝的,win7 下沒有這個文件)安裝java后&a…

python 教學_「Python基礎」一次就裝好Python手把手裝到好

一、前言:安裝Python有兩個主要的方法,視情況而定我兩個都會用:(1)安裝 AnacondaAnaconda像一個懶人包,安裝它等于把Python安裝好連同把Python大部分的套件也下載好了,不只如此連通較常用的Python IDE一同幫你裝到好。…

java求二維數組每行的最大值_用JAVA輸入一個二維數組a[3][4]的元素值,求輸出其元素最大值...

展開全部這個簡單啊,把所有元素遍歷一邊62616964757a686964616fe58685e5aeb931333335343963代碼:import java.util.Scanner;public class Help2 {public static void main(String[] args) {Scanner inputnew Scanner(System.in);System.out.print("…

java redis 面試題_Java開發人員怎么面試 常見Redis面試題有哪些

Java開發人員怎么面試?常見Redis面試題有哪些?Redis是目前各大企業都在使用的人們技術,也是企業選拔人才時考核的一個難題。有很多同學只是簡單了解Redis的應用,但對于為什么要用Redis以及企業面試中有關Redis的問題卻答不上來。接…

java方法重載實事例_零基礎java入門教程函數重載function實例化格式案例

java函數的重載,說白了就是函數塊函數名一樣,但函數類型和參數類型和參數列表個數不同重載之和參數列表有關系,與返回值無關java函數重載函數重載鋪墊如下圖函數重載鋪墊上圖功能顯示,功能一致所以功能一致所以用的功能函數名一致…

java 類 屬性數量_跟我學java編程—Java類的屬性與成員變量

在定義類時,經常需要抽象出它的屬性,并定義在類的主體中。下面就來介紹與屬性相關的內容。常量屬性在類中定義的屬性有常量屬性和成員屬性之分。常量屬性用final關鍵字修飾,常量只能賦值一次,在程序中不能修改它的值。一般來說&am…

java獲取界面輸入數字_通過JAVA設計 GUI 界面的計算器程序,用戶可以通過鼠標依次輸入參加計算的數值,進行加、減、乘、...

通過JAVA設計 GUI 界面的計算器程序,用戶可以通過鼠標依次輸入參加計算的數值,進行加、減、乘、2016-08-22 0 0 0 4.0分其他1積分下載如何獲取積分?通過JAVA設計 GUI 界面的計算器程序,用戶可以通過鼠標依次輸入參加計算的數值&am…

java自定義錯誤碼類_如何編寫和應用Java的自定義異常類

11.7.1編寫自定義異常類的模式編寫自定義異常類實際上是繼承一個API標準異常類,用新定義的異常處理信息覆蓋原有信息的過程。常用的編寫自定義異常類的模式如下:public class CustomException extends Exception {//或者繼承任何標準異常類public Custom…

java對mysql查詢_如何利用java對mysql數據庫進行增刪改查

代碼如下:增:Test//數據插入public void demo1() {Connection connnull;Statement stmtnull;try {//注冊驅動Class.forName("com.mysql.jdbc.Driver");//創建連接connDriverManager.getConnection("jdbc:mysql://localhost:3306/name&quo…

util.java_TelnetUtil.java

package com.ailk.ess.webapp2.servermng.net;import java.io.InputStream;import java.io.OutputStream;import java.util.ArrayList;import java.util.List;import org.apache.commons.net.telnet.TelnetClient;public class TelnetUtil {//telnet客戶端對象VT220/VT52Telnet…

生活中java繼承例子_簡單繼承例子:java

通用類,來繼承出圓和矩形。package circle;public class Geometric {private String color"white";private boolean filled;private java.util.Date dateCreated;public Geometric(){dateCreatednew java.util.Date();}public Geometric(String color,boo…

java技術簡介英文_Java技術常見的英文縮寫

1、 URL,Uniform Resource Location,統一資源定位符。2、 JDBC,Java DataBase Connectivity,Java數據庫連接。3、 JSP,Java Server Pages,Java服務器頁面。4、 JVM,Java Virtual Machine&#x…

Java解決空引用_Java 匠人手法 - 優雅的處理空值

原標題:Java 匠人手法 - 優雅的處理空值作者:Lrwin導語在筆者幾年的開發經驗中,經常看到項目中存在到處空值判斷的情況,這些判斷,會讓人覺得摸不這頭緒,它的出現很有可能和當前的業務邏輯并沒有關系。但它會…

mysql 嘗試讀取超過流末尾的_MySql異常:嘗試讀取超出流末尾的內容

問題詳細描述:2020-09-04 11:28:19,576 [DefaultQuartzScheduler_Worker-1] DEBUG MySql.Data.MySqlClient.MySqlException (0x80004005): Fatal error encountered during command execution. ---> MySql.Data.MySqlClient.MySqlException (0x80004005): Fatal …

mysql對稱連接什么意思_對稱加密與非對稱加密的區別是什么

區別:1、對稱加密中加密和解密使用的秘鑰是同一個;非對稱加密中采用兩個密鑰,一般使用公鑰進行加密,私鑰進行解密。2、對稱加密解密的速度比較快,非對稱加密和解密花費的時間長、速度相對較慢。3、對稱加密的安全性相對…

php引號變量_下列PHP數據庫insert語句中變量前后的點和雙引號有什么作用?

這就要從雙引號和單引號的作用講起:雙引號里面的字段會經過編譯器解釋然后再當作HTML代碼輸出,但是單引號里面的不需要解釋,直接輸出。例如:$abcI love u;echo $abc //結果是:I love uecho $abc //結果是:$abcecho "$abc&quo…

php excel 設置常規_php實現的操作excel類詳解

本文實例講述了php實現的操作excel類。分享給大家供大家參考,具體如下:class Excel{static $instancenull;private $excelnull;private $workbooknull;private $workbookaddnull;private $worksheetnull;private $worksheetaddnull;private $sheetnum1;p…

php析構函數使用,php析構函數__destruct()使用方法及實例講解

通過上一篇文章《php 構造函數__construct()使用分析》的講解,我們已經知道了什么叫構造方法。那么與構造方法對應的就是析構方法。析構方法允許在銷毀一個類之前執行的一些操作或完成一些功能,比如說關閉文件、釋放結果集等。析構方法是PHP5才引進的新內…

ubuntu創建php文件,ubuntu系統創建桌面快捷方式的方法

在ubuntu系統中,自己安裝的程序往往沒有創建桌面快捷方式,每次都通過終端然后輸入絕對路去徑執行命令比較繁瑣,其實可以像windows那樣自己在桌面程序創建程序的快捷方式,這樣方便了每次的啟動。這里以Navicat為例說明一下在linux(…

php設計模式及案例分析,一個案例來認識PHP經典設計模式 | 張先生博客

/*** 單例模式*/class Site{//屬性public $siteName;//本類的靜態實例public static $instance null;//禁用掉構造器private function __construct($siteName){$this->siteName $siteName;}//獲取本類唯一實例public static function getInstance($siteNme 默認siteName值…