當前位置:首頁 » 編程軟體 » 如何編譯lib

如何編譯lib

發布時間: 2022-07-18 14:36:08

⑴ 如何編譯libcurl

1:linux源碼編譯
./configure --prefix=/usr/local/curl --disable-shared --enable-static --without-libidn --without-ssl --without-librtmp --without-gnutls --without-nss --without-libssh2 --without-zlib --without-winidn --disable-rtsp --disable-ldap --disable-ldaps --disable-ipv6

注意:不需要其它功能就disable,不然會在連接時報錯, 如果你沒有disable掉,但你的機器上又沒有安裝相應的庫,link時會報錯。

2:windows下源碼編譯
libcurl 7.21以後的版本在Windows下的編譯比較簡單,自帶了MinGW和VC環境的Makefile文件,首先去Curl官網下載源代碼:http://curl.haxx.se/download.html,任選一個下載即可,推薦這個: curl-7.21.2.tar.gz,下載完成後解壓開,打開命令行進入curl源碼目錄,(在此之前請先設置好MinGW的環境變數):
cd curl-7.21.2
編譯libcurl庫文件:
cd lib
make -f Makefile.m32
等待編譯完成即可
(若需編譯生成curl可執行文件,則執行:
cd ../src
make -f Makefile.m32)

編譯完成後,我們需要復制include頭文件和庫文件到一個目錄供程序開發用
1. 新建curllib目錄
2. 新建curllib/include目錄,將源代碼include目錄里的curl文件夾復制到curllib/include目錄,這些是使用libcurl需要的頭文件
3. 新建curllib/lib目錄,將源代碼lib目錄里編譯好的庫文件libcurl.a,libcurldll.a,libcurl.dll復制到curllib目錄
4. 將MinGW安裝目錄下lib文件夾里的libwldap32.a和libws2_32.a復制到curllib/lib目錄
至此,curllib就是我們開發中要使用到的libcurl的全部文件,下面新建一個測試程序main.c

⑵ 怎樣編譯生成lib文件啊

需要先製作DLL文件,然後生成對應DLL文件的LIB文件,並編寫由DLL文件中的公開函數的聲明所組成的頭文件。

請參閱有關DLL文件製作的教程

⑶ 安卓lib文件怎麼編譯

LIB有兩種,一種是靜態庫,比如C-Runtime庫,這種LIB中有函數的實現代碼,一般用在靜態連編上,它是將LIB中的代碼加入目標模塊(EXE或者DLL)文件中,所以鏈接好了之後,LIB文件就沒有用了。一種LIB是和DLL配合使用的,裡面沒有代碼,代碼在DLL中,這種LIB是用在靜態調用DLL上的,所以起的作用也是鏈接中用,鏈接完成了,LIB也沒用了。至於動態調用DLL的話,根本用不上LIB文件。 目標模塊(EXE或者DLL)文件生成之後,就用不著LIB文件了。

⑷ 如何添加預編譯靜態庫 libwebrtc

添加預編譯靜態庫 libwebrtc 的步驟如下:【點擊免費試用,0成本啟動】

1、右擊target,選擇add -> new target
2、在彈出的 NewTarget 界面中選擇Cocoa Touch -> Static Library ,為新 library 取個名字。將源文件添加到這個庫。可以直接拖動現存源文件,也可以右擊 -> add 。注意選擇新建的庫為添加的 target 。
3、設置原項目,令其使用新建的庫。
4、右擊原項目的 target ,選擇 getInfo 。
5、選擇 General 選項卡。
6、向 linked libraries 中添加新創建的庫 (即添加 .a 文件)。推薦選擇ZEGO即構科技,該公司擁有4行代碼,30分鍾在APP、Web和小程序等應用內實現視頻通話、語音通話,互動直播功能。

想要了解更多關於這方面的相關信息,推薦咨詢ZEGO即構科技。深圳市即構科技有限公司(簡稱ZEGO即構科技) 於2015年6月成立,是一家全球雲通訊服務商。企業/開發者通過接入ZEGO提供的服務即可低門檻地獲得實時音視頻通訊能力,尤其在弱網環境下仍然可以實現高質音畫、穩定可靠。截止目前,ZEGO已經為兩百多個國家和地區的用戶提供了優質服務。

⑸ 如何在iOS下編譯librtmp

編譯librtmp需要先編譯openssl,因為librtmp依賴openssl

首先編譯openssl:

把以下內容保存為shell腳本

#!/bin/sh

VERSION="1.0.1h" #指明openssl的版本信息,比如下載的是openssl-1.0.1h.tar.gz那麼對於就填寫1.0.1h
SDKVERSION="7.1" #指明ios sdk的版本號,目前最新的是7.1,不清楚的同學可以 ls /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS7.1.sdk/ 一下看看自己的iPhoneOS7.1.sdk是不是7.1

CURRENTPATH=`pwd`
ARCHS="i386 armv7 armv7s arm64"
BUILDPATH="${CURRENTPATH}/build"
LIBPATH="${CURRENTPATH}/lib"
INCLUDEPATH="${CURRENTPATH}/include"
SRCPATH="${CURRENTPATH}/src"
LIBSSL="libssl.a"
LIBCRYPTO="libcrypto.a"
DEVELOPER=`xcode-select -print-path`

if [ ! -d "$DEVELOPER" ]; then
echo "xcode path is not set correctly $DEVELOPER does not exist (most likely because of xcode > 4.3)"
echo "run"
echo "sudo xcode-select -switch <xcode path>"
echo "for default installation:"
echo "sudo xcode-select -switch /Applications/Xcode.app/Contents/Developer"
exit 1
fi

set -e
if [ ! -e openssl-${VERSION}.tar.gz ]; then
echo "Downloading openssl-${VERSION}.tar.gz"
curl -O http://www.openssl.org/source/openssl-${VERSION}.tar.gz
else
echo "Using openssl-${VERSION}.tar.gz"

# Remove the source directory if already exist
rm -rf "${SRCPATH}/openssl-${VERSION}"
fi

mkdir -p "${SRCPATH}"
mkdir -p "${BUILDPATH}"
mkdir -p "${LIBPATH}"
mkdir -p "${INCLUDEPATH}"

tar zxf openssl-${VERSION}.tar.gz -C "${SRCPATH}"
cd "${SRCPATH}/openssl-${VERSION}"

LIBSSL_REPO=""
LIBCRYPTO_REPO=""

for ARCH in ${ARCHS}
do
if [ "${ARCH}" == "i386" ];
then
PLATFORM="iPhoneSimulator"
else
sed -ie "s!static volatile sig_atomic_t intr_signal;!static volatile intr_signal;!" "crypto/ui/ui_openssl.c"
PLATFORM="iPhoneOS"
fi
export CROSS_TOP="${DEVELOPER}/Platforms/${PLATFORM}.platform/Developer"
export CROSS_SDK="${PLATFORM}${SDKVERSION}.sdk"
export BUILD_TOOLS="${DEVELOPER}"

echo "Building openssl-${VERSION} for ${PLATFORM} ${SDKVERSION} ${ARCH}"
echo "Please stand by..."

export CC="${BUILD_TOOLS}/usr/bin/gcc -arch ${ARCH}"

OUTPATH="${BUILDPATH}/openssl-${PLATFORM}${SDKVERSION}-${ARCH}.sdk"
mkdir -p "${OUTPATH}"
LOG="${OUTPATH}/build-openssl-${VERSION}.log"

if [[ "$VERSION" =~ 1.0.0. ]]; then
./Configure BSD-generic32 --openssldir="${OUTPATH}" > "${LOG}" 2>&1
else
./Configure iphoneos-cross --openssldir="${OUTPATH}" > "${LOG}" 2>&1
fi

# add -isysroot to CC=
sed -ie "s!^CFLAG=!CFLAG=-isysroot ${CROSS_TOP}/Platforms/${PLATFORM}.platform/Developer/SDKs/${CROSS_SDK} -miphoneos-version-min=7.0 !" "Makefile"

make >> "${LOG}" 2>&1
make install >> "${LOG}" 2>&1
make clean >> "${LOG}" 2>&1

LIBSSL_REPO+="${OUTPATH}/lib/${LIBSSL} "
LIBCRYPTO_REPO+="${OUTPATH}/lib/${LIBCRYPTO} "
done

echo "Build library..."
lipo -create ${LIBSSL_REPO}-output ${LIBPATH}/${LIBSSL}
lipo -create ${LIBCRYPTO_REPO}-output ${LIBPATH}/${LIBCRYPTO}

cp -R ${BUILDPATH}/openssl-iPhoneSimulator${SDKVERSION}-i386.sdk/include/openssl ${INCLUDEPATH}/
echo "Building done."
echo "Cleaning up..."
rm -rf ${SRCPATH}/openssl-${VERSION}
echo "Done."

保存腳本,添加腳本的執行許可權(chmod +x 腳本名稱)

運行腳本
可以編譯成功的,如果失敗,可以以打開那個log文件,查看失敗原因。

編譯成功以後,把lib文件和include拷貝到你的librtmp目錄(可以新建一個空得librtmp目錄),在librtmp目錄裡面同樣寫一個shell腳本,腳本如下:

#!/bin/sh

SDKVERSION="7.1" #這里跟openssl的地方是一個意思

CURRENTPATH=`pwd`
ARCHS="i386 armv7 armv7s arm64"

LIBPATH="${CURRENTPATH}/lib" #這里就是剛才拷貝過來的目錄,不要修改,因為librtmp最後生成的也放到了這個下面
INCLUDEPATH="${CURRENTPATH}/include" #這里就是剛才拷貝過來的目錄,不要修改,因為librtmp最後生成的也放到了這個下面

LIBRTMPREPO="git://git.ffmpeg.org/rtmpmp"
BUILDPATH="${CURRENTPATH}/build"
SRCPATH="${CURRENTPATH}/src"
LIBRTMP="librtmp.a"
DEVELOPER=`xcode-select -print-path`

if [ ! -d "$DEVELOPER" ]; then
echo "xcode path is not set correctly $DEVELOPER does not exist (most likely because of xcode > 4.3)"
echo "run"
echo "sudo xcode-select -switch <xcode path>"
echo "for default installation:"
echo "sudo xcode-select -switch /Applications/Xcode.app/Contents/Developer"
exit 1
fi

# Check whether openssl has already installed on the machine or not.
# libcrypt.a / libssl.a

set -e
echo 'Check openssl installation'
if [ -f "${LIBPATH}/libcrypto.a" ] && [ -f "${LIBPATH}/libssl.a" ] && [ -d "${INCLUDEPATH}/openssl" ]; then
echo 'Openssl for iOS has already installed, no need to install openssl'
else
echo 'Openssl for iOS not found, will install openssl for iOS'
./build-libssl.sh
echo 'Succeeded to install openssl'
fi

# Download librtmp source code from git repository
# We assuem the user already installed git client.
echo 'Clone librtmp git repository'

# Remove the directory if already exist
rm -rf "${SRCPATH}/rtmpmp"

git clone ${LIBRTMPREPO} src/rtmpmp
cd "${SRCPATH}/rtmpmp/librtmp"

LIBRTMP_REPO=""

for ARCH in ${ARCHS}
do
if [ "${ARCH}" == "i386" ];
then
PLATFORM="iPhoneSimulator"
else
PLATFORM="iPhoneOS"
fi
export CROSS_TOP="${DEVELOPER}/Platforms/${PLATFORM}.platform/Developer"
export CROSS_SDK="${PLATFORM}${SDKVERSION}.sdk"
export BUILD_TOOLS="${DEVELOPER}"

echo "Building librtmp for ${PLATFORM} ${SDKVERSION} ${ARCH}"
echo "Please wait..."

# add arch to CC=
sed -ie "s!AR=\$(CROSS_COMPILE)ar!AR=/usr/bin/ar!" "Makefile"
sed -ie "/CC=\$(CROSS_COMPILE)gcc/d" "Makefile"
echo "CC=\$(CROSS_COMPILE)gcc -arch ${ARCH}" >> "Makefile"

export CROSS_COMPILE="${DEVELOPER}/usr/bin/"
export XCFLAGS="-isysroot ${CROSS_TOP}/SDKs/${CROSS_SDK} -miphoneos-version-min=7.0 -I${INCLUDEPATH} -arch ${ARCH}"

if [ "${ARCH}" == "i386" ];
then
export XLDFLAGS="-L${LIBPATH} -arch ${ARCH}"
else
export XLDFLAGS="-isysroot ${CROSS_TOP}/SDKs/${CROSS_SDK} -miphoneos-version-min=7.0 -L${LIBPATH} -arch ${ARCH}"
fi
OUTPATH="${BUILDPATH}/librtmp-${PLATFORM}${SDKVERSION}-${ARCH}.sdk"
mkdir -p "${OUTPATH}"
LOG="${OUTPATH}/build-librtmp.log"

make SYS=darwin >> "${LOG}" 2>&1
make SYS=darwin prefix="${OUTPATH}" install >> "${LOG}" 2>&1
make clean >> "${LOG}" 2>&1

LIBRTMP_REPO+="${OUTPATH}/lib/${LIBRTMP} "
done

echo "Build universal library..."
lipo -create ${LIBRTMP_REPO}-output ${LIBPATH}/${LIBRTMP}

mkdir -p ${INCLUDEPATH}
cp -R ${BUILDPATH}/librtmp-iPhoneSimulator${SDKVERSION}-i386.sdk/include/ ${INCLUDEPATH}/

echo "Building done."
echo "Cleaning up..."

rm -rf ${SRCPATH}/rtmpmp
echo "Done."

保存腳本

運行腳本

⑹ 有一個庫的源代碼,怎麼用mingw編譯產生成lib

mingw編譯出來的靜態庫後綴名為.a,編譯出來的動態庫的導入庫後綴名為.dll.a,而在windows下後綴名為.lib的庫可能是靜態庫也可能是動態庫的導入庫。

mingw編譯出來的動態庫的導入庫可以直接在vc中直接使用,例如

#pragma comment(lib, "libx264.dll.a")

這樣你就不需要生成一個.lib後綴的動態庫的導入庫了,網上也有如何從.dll生成.lib的方法。

如果鏈接了動態庫的導入庫libpthread.dll.a,你發布的應用程序就要帶上pthread的dll。
使用靜態庫的好處是發布的應用程序組件模塊里不需要帶上相關的dll,如果要使用mingw編譯出來的靜態庫,可以如下:

#pragma comment(lib, "libx264.a")

但是僅僅鏈接這么一個靜態庫是不夠的,你還需要鏈接

libgcc.a

libmingwex.a

⑺ 如何編譯librdkafka

如果是在編程過程中,你的程序中需要明確指出頭文件 *.h 的路徑,如果不明確指出明確的路徑的話,那麼在編譯源程序時,必須要加上 -I 的選項(-I:include的縮寫),然後寫上頭文件的文件名,只有這樣,編譯器才能夠正確編譯你的源程序。

⑻ 如何編譯qtfreetype.lib

libfreetype是為跨平台設計的。
在windows下要編譯的話,可以直接打開freetype-2.4.10buildswin32vc2008目錄下的freetype.sln進行編譯。
有時候我們只希望對特定字體做簡單的事情,則我們可以對libfreetype進行裁剪。
裁剪的方式有兩種:
1,對於GNU make需要修改moles.cfg
2,對於其他編譯器,比如vs2008則需要修改ftmole.h
如果我們只想處理truetype的字體文件,則可以只保留sfnt_mole_class和tt_driver_class這兩個mole。
詳細信息可以參見:freetype-2.4.10docsCUSTOMIZE和freetype-2.4.10docsINSTALL.ANY
裁剪之後,最終可執行程序的大小可以從350KB減少到100KB,還是很明顯的。

熱點內容
命令行執行oracle腳本文件命令行 發布:2025-02-07 10:14:49 瀏覽:95
ibook安卓怎麼下 發布:2025-02-07 10:12:13 瀏覽:692
銀行卡沒有密碼怎麼辦啊 發布:2025-02-07 10:08:13 瀏覽:30
游戲庫源碼 發布:2025-02-07 09:49:15 瀏覽:53
享宇錢包上傳不了照片 發布:2025-02-07 09:48:32 瀏覽:632
模擬器怎麼開安卓版本 發布:2025-02-07 09:42:35 瀏覽:771
c程序設計語言源碼 發布:2025-02-07 09:22:41 瀏覽:623
資料庫域的概念 發布:2025-02-07 09:22:40 瀏覽:640
電信路由器賬號密碼多少 發布:2025-02-07 09:22:01 瀏覽:671
我的世界怎麼在別人伺服器開光影 發布:2025-02-07 09:21:20 瀏覽:12