当前位置:首页 » 编程软件 » 怎么动态编译库

怎么动态编译库

发布时间: 2023-06-01 23:56:32

① Cmake动态编译VTK库(QVtkwidget)

在版本问题上大费周章之后,得到如下的成功尝试

软件版本说明:

PCl1.8.1 + VS2017 + Qt5.9.6 + Cmake + Vtk8.0.0

点击Configure后对条目进行处理:(修改完成继续Configure直到没有错误)

1.点击Add Entry添加 

    Name:    CMAKE_DEBUG_POSTFIX 、Type:    STRING 、Value:-gd、Description:空

让vtk的lib最后分为debug版本跟release版本。Debug版本带-gd。Release版本不带-gd,方便区分.

2.勾选BUILD_SHARED_LIBS,这样最后生成的vtk才会有dll跟lib

3.CMAKE_INSTALL_PREFIX设置为你清空的VTK文件夹(为了方便,这里选择的路径为PCL集成的VTK路径)

4.勾选VTK_Group_Qt,这样以后方便在qt里面使用

5.修改Qt5_DIR路径为PATH=D:/Qt/Qt5.12.0/5.12.0/msvc2017_64/lib/cmake/Qt5

6.修改VTK_QT_VERSION:STRING=5,使用Qt5修改相应版本号

7.如出现qmake路径则修改QT_QMAKE_EXECUTABLE:FILEPATH=D:/Qt/Qt5.12.0/5.12.0/msvc2017_64/bin/qmake.exe

完成Configure,不出意外就不再显示红色,接着点Generate

接着以管理员身份运行VS2017,打开构建目录下的VTK.sln

选择Debug,x64,然后右键解决方案窗口的ALL_BUILD --> 生成。

 漫长等待...ing

然后右键install --> 仅生成install

Release版本同理,先ALL_BUILD --> 生成 再 右键install --> 仅生成install

至此完成编译VTK操作,接下来提取所需的QVtkwidget插件

② 怎样使用动态库中的条件编译

publicstaticvoidabc(){#region要执行的代码stringstrCode=@"usingSystem;usingSystem.Text;usingSystem.Collections.Generic;usingSystem.Linq;namespaceaaa{publicclassbbb{publicstaticstringccc(stringname){return""abc"";}}}";#endregion#region编译参数=newCompilerParameters();objCompilerParams.GenerateExecutable=false;//编译成exe还是dllobjCompilerParams.GenerateInMemory=false;//是否写入内存,不写入内存就写入磁盘objCompilerParams.OutputAssembly="E:\abc.dll";//输出路径objCompilerParams.IncludeDebugInformation=false;//是否产生pdb调试文件默认是falseobjCompilerParams.ReferencedAssemblies.Add("System.dll");objCompilerParams.ReferencedAssemblies.Add("System.Core.dll");//编译器选项:编译成(存储在内存中)的DLL/*objCompilerParams.CompilerOptions="/target:library/optimize";//编译时在内存输出objCompilerParams.GenerateInMemory=true;//不生成调试信息objCompilerParams.IncludeDebugInformation=false;*/#endregion#region编译//创建编译类CSharpCodeProviderobjCompiler=newCSharpCodeProvider();//进行编译=objCompiler.CompileAssemblyFromSource(objCompilerParams,strCode);#endregion#region取得编译成程序集,准备执行程序集里的类中的方法//获取编译结果:程序集AssemblyobjAssembly=objCompileResults.CompiledAssembly;//获取编译成的程序集的信息/*objectobjMainClassInstance=objAssembly.CreateInstance("Program");TypeobjMainClassType=objMainClassInstance.GetType();*/#endregion#region调用程序集中的类,执行类中的方法,得到结果/*objMainClassType.GetMethod("Main").Invoke(objMainClassInstance,null);objMainClassType.GetMethod("PrintWorld").Invoke(objMainClassInstance,null);*/#endregion

③ 如何编译C/Fortran动态/静态链接库

首先,传统的编译,也就是静态编译是把 源文件 翻译成目标文件,这个是一次性过程,也就是你所谓的静态编译。
后来的Java和.NET等语言,首先编译成中间形式,然后运行过程中根据需要编译成本地代码(注意这个过程不是一次性的,下次运行重新编译),这个就是JIT(即时编译)技术,从即时编译发展出了动态编译技术
————————————
(传统的)编译完成后,像C/C++、Fortran、汇编等语言,可以把多个目标文件合并到一个库文件中,这个就是静态库。比如常说的库函数printf就是libc里面的函数。
如果有了启动函数(main),main里面使用了printf,就可以通过静态链接技术,从libc中提取出printf所在的文件加入到可执行文件中,如果printf还需要其它函数,就继续搜索并加入列表,直到形成一个闭包。这个就是静态链接。
可是静态链接有个明显的缺点,如果每个程序都需要printf,那么printf这个函数的代码就会同时存在在每个程序中,这样也太占地方了吧。所以发明了动态连接技术,其实有两种形式。无论哪一种,都是首先记录下需要调用printf这个函数以及所在的动态库,等到运行的时候再加载动态库,从动态库中找到真正的printf去执行。
由于,动态链接技术需要一些额外的信息,传统的静态库是不具备的,这些额外信息主要是重复加载和卸载时所需要的一些代码,因此需要动态链接库。

④ 如何编译C和C++代码写的动态库

来来来,新技能,linux下构建lib库的步骤:
1、准备库函数源文件;
my_add.c

int add(int a, int b){ printf("Here is my_add.c\n"); return a+b;}

my_sub.c

int sub(int a, int b){ printf("Here is my_sub.c \n"); return a-b;}

2、生成目标文件;
gcc -c my_add.c my_sub.c
会生成my_add.o,my_sub.o

3、对目标文件归档;
ar crv libmylib.a my_add.o my_sub.o
会生成libmylib.a

4、写头文件;
mylib.h

#ifndef _MY_LIB_H_#define _MY_LIB_H_ int add(int a, int b);int sub(int a, int b); #endif

5、测试程序;
test.c

#include "mylib.h"int main(){ printf(" MAIN:%d\n", add(12,24));}

6、编译测试程序;
gcc test.c -L. -lmylib

答案摘自:log.anycle.com/skill/219.html

⑤ 如何编译 opencv动态链接库

在一个项目中需要用到OpenCV,刚开始使用了OpenCV的动态链接库,这样,在移动可执行程序时还必须将OpenCV动态支持库一起搬移,很是麻烦。所以,最终选择OpenCV静态链接库,这样程序移植运行就方便了很多。

需要编译成静态库以便于应用程序链接。

网上有的教程中写的在VC++2010下安装OpenCV2.1时用到了TBB库,而我在编译链接自己的程序后需要用到TBB.dll。本人设计的目的就是要做一个独立的界面程序,不需要携带其他第三方库。经过一段时间的努力最终找到了编译OpenCV2.1静态库的方法。

需要的工具环境及文件:

-------------------------------------------------------------------------------------------------------------

1、Windows XP

2、VC++2010(VS2010)

3、为编译OpenCV源码包(我下载的有:OpenCV2.1.0,OpenCV2.3.0及OpenCV2.4.4)

4、CMake2.8.9

说明:OpenCV各版本官方下载地址:opencv.org/

cmake-2.8.9下载地址:ishare.iask.sina.com.cn/download/explain.php?fileid=35025936

--------------------------------------------------------------------------------------------------------------

以OpenCV2.1.0编译静态库为例

CMake配置

-------------------------------------------------------------------------------------------------------------

打开CMake并设置:

Where is the rource code :OpenCV源代码所在的文件夹

Where to build the binaries:CMake配置好得到的文件放在位置(我的:E:\OpenCV2.1.0-prj)

然后点击configure,选择"Visual Studio 10"。然后确定。

等待configure完成,会出现很多红色的选项,因为主要是生成OpenCV的库,所以只需保留某些选项:

去掉BUILD_NEW_PYTHON_SUPPORT,BUILD_SHARED_LIBS, BUILD_TESTS

勾选OPENCV_BUILD_3RDPARTY_LIBS, WITH_TBB,WITH_JASPER, WITH_JPEG,
WITH_PNG, WITH_TIFF选项,

然后再点击configure,如下图:

提示TBB_INCLUDE_DIR找不到,因为我们不需要TBB库,所以忽略,再一次点击configure。

等待配置完成,最后点击generate,完成后关闭CMake。

-------------------------------------------------------------------------------------------------------------

VC++2010编译静态库

-------------------------------------------------------------------------------------------------------------
进入E:\OpenCV2.1.0-prj目录,使用VC++2010打开.sln文件,打开项目管理器

这时候会看到

解决方案中有很多小项目存在。

注:这时我们右键任意点击一个子项目(如cv),选择属性,可以在配置属性下的常规项目中看到,配置类型为
静态库(lib)。

按住ctrl键,选中除过ALL_BUILD, INSTALL, ZERO_CHECK,
uninstall四个项目的其他所有项目,在菜单中选择项目->属性,打开配置属性->c/c++->代码生成选项,在右侧窗口中的运行时库中选择多线程调试(/MTd),然后确认。

说明:这里有四个选项(/MT, /MTd, /MD,
/MDd),前两个一组,为静态链接运行时库,运行时不需要运行时库的支持,代码直接插入到程序中去;后两个一组,为动态链接运行时库,运行时需要msvcr90.dll或msvcp90.dll支持。

我们先编译Debug版的OpenCV静态库,在解决方案"opencv"(22个项目)上单击右键,选择重新生成解决方案,此时便开始编译OpenCV库了,等编译结束会提示完成16个,失败4个:

这四个项目生成的是exe程序,不需要管他们。到这步我们已经生成了Debug版本的静态库!

然后我们用相同的方式生成Release版的库,在之前的基础上只需要将选项选择多线程/MT,再进行编译。编译时警告很多,直接忽略!

注意:/MT即是Release版本,/MTD即是Debug版本。

最终我们需要的静态库就存在:E:\OpenCV2.1.0-prj/lib 和 E:\OpenCV2.1.0-prj/3rdparty/lib
两个目录,我们编译好的库就在这两个文件夹下。分别

将E:\OpenCV2.1.0-prj/3rdparty/lib中Debug
下面的所有文件Copy到E:\OpenCV2.1.0-prj/lib中的Debug 文件中。

将E:\OpenCV2.1.0-prj/3rdparty/lib中Release下面的所有文件Copy到E:\OpenCV2.1.0-prj/lib中的Release文件中。

⑥ 动态库怎么编译

# 声称动代连接库模山销,假设名唯轮称为libtest.so gcc x.c y.c z.c -fPIC -shared -o libtest.so # 将main.c和动态连接库进行连接生成可执行文件 gcc main.c -L. -ltest -o main # 输出LD_LIBRARY_PATH环境变量,一边动态库装载旦游器能够找到需要的动态库 e...

⑦ 如何交叉编译 动态库

首先,你要保证你编译的程序使用的交叉编译链是开发板支持的,例如arm-linux-4.3.2,一般是在虚拟机下面的linux系统下的/etc/profile里面添加编译链路径;接着,需要确保使用的内核是开发板目前使用的内核,一般MINI2440是使用linux-2.6.30版本的,这个要在程序的makefile文件里面改;还有,如果你使用静态编译方式文件会比较大,但是不用依赖库,如果是用动态编译,文件就比较小,但是依赖动态库,如果放到开发板上运行提示缺少动态库,就证明你没有把动态库放进开发板的/lib里面,可以用ldd指令查看需要哪些库;最后,记住移植的方式可以使用NFS或者TFTP,U盘也可以,放到开发板上后必须在文件存放的当前目录下./可执行文件,或者把文件放入/bin或者/sbin下面,就可以直接可执行文件,不用加./你可以在程序里面加些调试信息输出,例如printf,以此证明有执行。

热点内容
电脑服务器号在哪里找 发布:2025-02-12 23:22:29 浏览:12
linux查看系统是32位 发布:2025-02-12 23:17:29 浏览:989
从数据库中随机取数据库数据 发布:2025-02-12 23:17:25 浏览:878
ftp下载软件安卓 发布:2025-02-12 23:07:24 浏览:567
c搜索算法 发布:2025-02-12 23:05:47 浏览:862
返回服务器地址 发布:2025-02-12 23:05:45 浏览:181
我的世界推荐在线服务器 发布:2025-02-12 23:00:18 浏览:462
什么是解压目录 发布:2025-02-12 22:49:24 浏览:981
惠普电脑选购要考虑哪些因素配置 发布:2025-02-12 22:43:50 浏览:223
算法导论和算法 发布:2025-02-12 22:43:13 浏览:932