导航:首页 > 源码编译 > build怎么编译lib文件

build怎么编译lib文件

发布时间:2022-08-20 23:11:01

① lib文件是什么是不是编译自动生成我不加lib文件运行不了

lib文件是静态库,这种文件中有头文件中声明的函数的实现代码,一般用在静态连编上,编译链接时,将lib文件与其他模块编译生成的目标代码链接,从而形成能够运行的可执行文件。
#pragma comment(lib, "pcc32_vc6.lib")就是连入一个库文件,表示链接pcc32_vc6.lib这个静态库文件来生成可执行文件。

② ccs如何编译工程文件

你应该参照相关的工程学科,然后进行专业术语的编辑。

③ 如何使用C++Builder编译Delphi使用Obj文件

一直以来,Delphi 都可以用命令行 dcc32 ProjectName.dpr 对项目进行编译链接,非常方便,Delphi对项目文件的参数配置处理的很简单,便于阅读处理起来也很直观,编译的中间文件也很简单(dcu,dcp)。
而C++Builder就没那么幸运了,因为包含了C++的特征,各种编译的中间文件:lib,obj,res,map,tds。后来新版又增加了一些预编译文件:ilc,ild,ilf,...,pch,#00,...等等等等,各种搜索路径(Include Path,Library Path,Browse Path...),要是用bcc32及ilink32手工进行编译链接,命令的参数都足够写上大半天。幸好,在旧版C++Builder中,如果要用命令行编译BCB项目,只要将bpr文件转换为mak文件,再使用make命令进行编译链接也比较方便,不需要过多的处理:
[plain] view plainprint?
bpr2mak -oProject1.mak Project1.bpr
make -fProject1.mak

自从Delphi/C++Builder开始使用 MSBuild* 编译系统后(好像是RAD Studio 2006开始,具体忘记了),Delphi项目在保存为dpr的同时,也会保存一份dproj的项目文件,dpr依旧沿用旧格式,dproj 则以MSBuild规范以XML格式保存,除了可以用旧方式命令行编译dpr外,也可以用:

[plain] view plainprint?
msbuild.exe /t:Rebuild /p:Config=Debug ProjectName.dproj

进行编译,但msbuild必须设定一些环境变量,RAD Studio自带了一个命令行工具已经做好了这些,其实就是设定了以下几个环境变量($(BDS)\bin\rsvars.bat):

[plain] view plainprint?
@SET BDS=C:\Embarcadero\RAD Studio\7.0
@SET BDSCOMMONDIR=C:\Users\Public\Documents\RAD Studio\7.0
@SET FrameworkDir=C:\Windows\Microsoft.NET\Framework\v2.0.50727
@SET FrameworkVersion=v2.0.50727
@SET FrameworkSDKDir=
@SET PATH=%FrameworkDir%;%FrameworkSDKDir%;%PATH%
@SET LANGDIR=EN

C++Builder则又更杯具了一些,bpr2mak.exe工具已经没有了,所以只能采用MSBuild进行命令行编译。更加杯具的是,随着Delphi和BCB被多次转卖收购,新版本的发布似乎总会有各种各样的Bug,比如手头的RAD Studio 2009进行命令行编译,Delphi正常,BCB则报出超过100个错误,类似如下:

[plain] view plainprint?
C:\Embarcadero\RAD Studio\7.0\Bin\CodeGear.Cpp.Targets(2175,3): error : Error: Unresolved external '__fastcall Strhlpr::UnicodeFree(System::UnicodeString&)' referenced from C:\EMBARCADERO\RAD STUDIO\7.0\LIB\DEBUG\VCLE.LIB|ustring
C:\Embarcadero\RAD Studio\7.0\Bin\CodeGear.Cpp.Targets(2175,3): error : Error: Unresolved external 'Typinfo::BooleanIdents' referenced from C:\EMBARCADERO\RAD STUDIO\7.0\LIB\DEBUG\VCLE.LIB|vclinit

检查了一下发现编译过程(bcc32.exe)没有问题,只是在ilink32.exe链接过程中报错,在IDE中打开此项目进行编译,查看Message->Output窗口,比较两者的ilink32命令行参数,发现两者有两个地方有明显差异,一个是IDE生成的命令中没有类似 C:\Embarcadero\RAD Studio\7.0\lib\EN\debug 的路径(指的是EN这个目录,去除上面rsvars.bat中的@SET LANGDIR=EN 就可以避免产生这样的搜索路径) ,但是虽然这个目录不存在,也应该不至于导致出错。第二个差异是缺少了rtl.bpi和vcl.bpi的附加obj参数,解决办法是在$(BDS)\bin目录中找到 CodeGear.Cpp.Targets 文件,用记事本打开,搜索字符“memmgr.lib“,在前面加上"rtl.bpi;vcl.bpi" (用;分隔,不含引号),一共有两处要修改。或者查找 "c0w32",在后面加上 "rtl.bpi;vcl.bpi",只有一处修改 —— 因为IDE的命令行中 rtl.bpi vcl.bpi是在c0w32和memmgr.lib中间的。—— (注意:在XE2中,加在c0w32后面已经不管用了,编译会报另一个错误VCL.BPIW.OBJ不存在,Targets文件有很大变化,可能参数的位置变动过了,导致与其他参数混在一起,所以还是加到memmgr.lib处更加合理)。

一些组件包比如DevExpress的Package,没有dproj或者cproj 项目文件,只能通过IDE进行转换,但坑爹的是bpk在好几个版本以前(CRS 2007?)已经不支持bpk项目,根本打不开也谈不上转换了,但它其实是一个make文件,可惜用make命令编译还是要出错,不想去研究了。总之,BCB永远活在Delphi的阴影下。

④ msbuild脚本怎么制定lib

类似make的东西,不过可以直接从项目解决方案来编译。 在开始——所有程序——Microsoft Visual Studio 2012——Visual Studio Tools——VS2012 开发人员命令提示 然后在弹出来的黑窗口里面运行这个开源库的编译脚本

⑤ codeblocks下如何生成lib文件

编译就行了 可以在Debug文件夹下找到你生成的DLL文件
DLL文件不能运行,如果要测试的话,需要新建一个Console项目或Win32项目来调用DLL中函数

⑥ 我想在maven工程编译的时候,将所需要的jar包都导入到lib文件夹下,希望高手帮忙解决。

<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.3.2</version>
<configuration>
<source>1.6</source>
<target>1.6</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<classpathPrefix>lib/</classpathPrefix>
<mainClass>com.abc.ABCTest</mainClass> -->入口类名
</manifest>
</archive>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<id></id>
<phase>install</phase>
<goals>
<goal>-dependencies</goal>
</goals>
<configuration>
<outputDirectory>$/lib</outputDirectory> -->拷贝所以依赖存放位置
</configuration>
</execution>
</executions>
</plugin>
</plugins>

然后再用mvn clean install 装配一下,打出的jar包就可以运行

⑦ C语言如何生成库文件

有一些代码,我们编程时经常用到,或者我们对某些部分很熟悉,并写出了一些可用的接口。这时,我们会考虑把这些c文件做成一个lib库,以方便自己使用,或这给别人调用。

我这里介绍下在vc++6.0下如何来制作静态库:

第一步:创建一个工程,选择Win32Static Library,输入工程名。这时就创建好了。

第二步:工程创建好了,再点击新建,这时选择文件,选择c++ source file选项,创建一个.c

文件。

在这个文件中,你可以写入你要做成库的c函数。当然,可以继续创建其他c文件,然后将要供外部使用的接口单独放到头文件中,一般而言,一个c文件对应一个头文件。

第三步:完成以上步骤后,我们就可以生成库了。事实上,我们点击编译即可,这时就可以生成.lib文件了。

一般情况下,是可以正常生成lib文件的。有头文件和lib文件就可以给别人用了。然后我们可以写一个测试函数来试试可不可以使用。

要调用生成的lib中的函数,就要引入头函数。这时,你把lib和头文件放入当前工程中,但build的时候却显示了连接错误。那是因为你没有把lib文件包含进来。加入下面这句话即可了:

#pragma comment(lib, "mylib.lib ")

Ok,自己的lib库就这样做成了。以后可以随便调用了。

⑧ 有大侠在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."

保存脚本

运行脚本

不出意外就编译成功了。

阅读全文

与build怎么编译lib文件相关的资料

热点内容
狸窝pdf转换器 浏览:696
ajax调用java后台 浏览:904
活塞式压缩机常见故障 浏览:614
break算法 浏览:731
换电池的app是什么 浏览:771
单片机ad采样快速发送电脑 浏览:22
第五人格服务器错误是什么回事儿 浏览:467
查看手机谷歌服务器地址 浏览:191
python操作zookeeper 浏览:705
苹果手机dcim文件夹显示不出来 浏览:430
如何压缩文件夹联想电脑 浏览:583
程序员的学习之旅 浏览:440
apkdb反编译 浏览:922
雪花算法为什么要二进制 浏览:825
在文档中打开命令行工具 浏览:608
android图标尺寸规范 浏览:369
python实用工具 浏览:208
流量计pdf 浏览:936
科东加密认证价格 浏览:532
dos命令读文件 浏览:997