首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何静态链接.DLL?

如何静态链接.DLL?
EN

Stack Overflow用户
提问于 2009-01-08 04:03:22
回答 4查看 42.2K关注 0票数 27

我们有一个由VS构建的(纯原生C++) .DLL。作为客户端,我们有一些原生C++应用程序和一个.Net-Wrapper围绕着这个用C++/CLI编写的DLL。最后,还有一些用C#编写的.Net-Wrapper客户端应用程序。

我的问题是,native.dll必须以一种与.Net世界不同的方式分发,并且VS不会跟踪那个DLL。因此,为了让我的所有C#应用程序正常工作,我必须将其复制到每个可执行目录中,或者将其放在%PATH%中的某个位置(在开发人员计算机上,我会避免这样做,因为他们可能希望使用不同版本的DLL启动不同的应用程序)。如果存在引用包装器DLL的UserControls,则会出现更大的问题:您必须将DLL复制到VS的目录,或者再次复制到%PATH%。但最糟糕的情况发生在我们的翻译器工具上。此工具跟踪.Net-Assemblies,并将其打包到可发送给外部翻译器的翻译器包中。据我所知,没有办法将原生.DLL放入那个包中!

因此,我计划将本机DLL静态链接到.Net-Wrapper中,这将解决我的问题。但是对于我们的本机应用程序,这个本机DLL必须仍然是一个DLL。

所以我有两个选择:

  • 创建了两个项目(一个生成静态库;另一个创建动态=>,我尽量避免这种情况)
  • 找到了一种链接DLL的解决方案,以便让VS从一个项目

生成两个输出

EN

回答 4

Stack Overflow用户

发布于 2009-11-04 20:13:57

在DLL的C++项目文件中,创建两个配置,一个生成dll,另一个生成.lib。不需要两个项目,因为任何.NET/C++项目都可以支持多个构建配置(这就是发布版本和调试版本不同的构建方式)。

票数 7
EN

Stack Overflow用户

发布于 2009-01-10 15:16:39

另一种选择是有两个项目,一个项目将输出一个可以静态链接的.lib,另一个项目将输出一个.dll并将您的.lib作为依赖项,您应该将.def添加到您的.dll中,其中包含您计划导出的符号,否则它将为空。

票数 6
EN

Stack Overflow用户

发布于 2009-01-08 04:11:49

拿起一份DLL to Lib (编辑:如果你找不到更便宜的选择)

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/424032

复制
相关文章
MFC 调用静态链接 MFC 的规则 DLL
最近学习了生成静态链接的dll及其调用,写一下笔录和大家分享,有错误的地方欢迎大家指出来
包子388321
2020/06/16
2.5K0
静态链接,静态分派,动态链接
首先明确一个点:静态类型和实际类型都是可以改变的。唯一不同的是静态类型的变化是通过强转实现的而java中又有对应的强转字节码来获取更改之后得变量的静态类型所以编译时是可以确定变量的静态类型的,但是实际类型需要根据运行时才能够进行确定(下面动态链接详细说明)。
北洋
2022/05/06
1.3K0
链接 动态链接 静态链接
要想了解底层,链接是一个不得不过的一关,我总结了下学习的心得,首先要了解链接器到底是如何工作的,链接器分为两类,一个是静态链接,一个是动态链接,先来讲解静态链接,静态链接要干两件事:
gzq大数据
2021/09/26
2.9K0
[C-C++]DLL之旅2 : 调用DLL(静态&动态加载)
原文链接:http://blog.csdn.net/humanking7/article/details/78586478
祥知道
2020/03/10
2.8K0
12、动态链接库,dll
动态链接库通常都不能直接运行,也不能接收消息。它们是一些独立的文件,其中包含能被可执行程序或其它DLL调用来完成某项工作的函数。只有在其它模块调用动态链接库中的函数时,它才发挥作用。
全栈程序员站长
2022/07/05
8540
12、动态链接库,dll
webpack DLL 动态链接库
项目地址:https://github.com/Ewall1106/webpack-demo 是什么? 许多应用程序并不是一个完整的可执行文件,它们被分割成一些相对独立的动态链接库,即 DLL 文件,放置于系统中。当我们执行某一个程序时,相应的 DLL 文件就会被调用。一个应用程序可使用多个 DLL 文件,一个 DLL 文件也可能被不同的应用程序使用,这样的 DLL 文件被称为共享 DLL 文件。— 百度百科 翻译一下,在 webpack 中的动态链接库就是:由于每次更改了内容 webpack
Ewall
2020/12/01
2.3K0
vc dll静态函数导出
导出类 #if defined(COMMONLIBRARY_LIBRARY) # define DECL_EXPORT __declspec(dllexport) #else # define DECL_EXPORT __declspec(dllimport) #endif 导出类,可以直接导出 class DECL_EXPORT object {} 静态函数的实现需要在头文件中 导出模板 模板函数不能卸载cpp函数中 类模板的静态函数,不知道怎么导出的,可以改成静态模板函数导出
sofu456
2020/09/07
5370
python调用dll动态链接库
然后准备一个简单的dll(就普通的dll百度有一大堆就写一个加法就行,这里我就直接用我之前的GB.dll啦)
py3study
2020/01/08
2.6K0
C++静态链接
C++ 的一些语言特性使之必须由编译器和链接器共同支持才能完成工作。最主要的有两个方面,一个是C++ 的重复代码消除,还有一个就是全局构造与析构。另外由于C++ 语言的各种特性,比如虚拟函数、函数重载、继承、异常等,使得它背后的数据结构异常复杂这些数据结构往往在不同的编译器和链接器之间相互不能通用,使得C++ 程序的二进制兼容性成了一个很大的问题,我们在这一节还将讨论 C++ 程序的二进制兼容性问题。
233333
2018/09/14
1.7K0
静态链接库
库的存在,大大方便了我们进行编程。因为有了库,我们不必再从0开始,例如我们大多数人C语言写的第一个程序Hello World!都是用了库函数。以printf为例,我们只需要在程序源代码中包含<stdio.h>这个头文件之后,就可以使用printf函数了。这极大的方便了编程。同时库所带来的好处在于,头文件和库文件相结合的访问机制。有时候我们只想让别人使用自己实现的功能,并不想公开实现功能的源码,就可以将其制作为库文件,这样用户获取到的是二进制文件,而头文件又只包含声明部分,这样就实现了“将源码隐藏起来”的目的,且不会影响用户使用。
zy010101
2020/12/02
1.8K0
静态链接库
重定位 静态链接 动态链接 动态加载
动态链接与静态链接的区别 静态链接库、动态链接库、导入库的区别 Linux下的静态库、动态库和动态加载库 ---- 总结:并没有找到动态链接与动态加载的明显区别,但动态链接与静态链接的区别是明显的: 一个是编译时就链接进可执行文件,一个是执行时才链接。 ---- 静态重定位 重定位时,取重定位项,加上重定位因子得到欲修改位置的实际地址。 优点:无须硬件支持 缺点:程序重定位以后就不能在内存中移动。要求程序的存储空间是连续的,不能把程序存储到若干个不连续的区域中。 动态重定位 当CPU取一条访问内存的
平凡的学生族
2019/05/25
1.6K0
VC++DLL动态链接库程序
最近查找了一下VC++中关于编写DLL动态库的资料,主要是导出函数和导出类的编写。因为在实际项目开发中有时需要使用C++编写好DLL接口,控制设备,提供给其他语言如Nodejs、C#等使用。
ccf19881030
2019/07/10
1.4K0
【Linux】动静态库以及动静态链接
我们在使用Linux的时候,不禁会有这么一个疑问:为什么我们能够在Linux下进行c/c++代码的编写以及编译呢?这是因为Linux系统默认携带了语言级别的头文件以及语言所对应的库。
诺诺的包包
2023/02/20
4.9K0
cmake:动态链接库(so)中静态链接tcmalloc(gperftools2.4)暨静态链接libstdc++
将tcmalloc作为动态库使用,非常方便,网上有很多资料介绍了。tcmalloc.a也可以以静态链接的方式加入应用程序中,大概因为使用太方便,网上关于这方面的介绍都是一笔带过,但是如果要在动态 库(so)中静态编译tcmalloc,却是有所不同的。 我的项目中有一个so动态库,需要在java中通过jni调用,因为涉及频繁的内存分配操作所以这个so希望用tcmalloc管理内存池以提高系统运行效率,如果使用以动态库方式使用tcmalloc。那么在应用服务器(tomcat)启动的时候,需要先设置LD_PRELOAD参数指向tcmalloc.so,然后执行startup.sh启动tomcat。这样以来,不仅是我的so库,整java程序在运行过程中的所有向操作系统申请释放内存的过程都交给了tcmalloc管理了,其实挺好的。使用这种方案,我的so库代码不需要在编译时链接tcmalloc,什么都不用改变,就能使用tcmalloc。 但是凡事有利就有弊,这个方案带的成本就是在系统安装、维护时稍显复杂:需要在服务器上安装tcmalloc和libunwind(应用系统运行在64位操作系统下),还可能需要修改tomcat启动脚本以加入LD_PRELOAD参数,对工程实施人员的要求比较高。
10km
2022/05/07
2.1K0
CMake 链接静态库 示例
lib-b 静态链接 lib-a, final静态链接lib-b 和 lib-a, 且final同样静态编译
code-x
2022/08/31
1.4K0
Python调用动态链接库DLL文件
但有一个问题,现在Python的默认版本都是64位,但dll有很多是32位,因此就会出现:
小锋学长生活大爆炸
2022/05/09
1.9K0
CodeBlocks:静态链接下的c语言静态库
静态链接 1.建立静态链接库 File→New→Project→Static library
心跳包
2020/08/31
1.7K0
gcc用法以及静态/动态链接
-E:只进行预处理,不编译 -S:只编译,不汇编 -c:只编译、汇编,不链接 -g:编译器在编译的时候产生调试信息。 -I:指定include包含文件的搜索目录 -o:输出成指定文件名,如果缺省则输出位a.out -L:搜索库的路径 -l:指定程序要链接的库 -w:忽略所有警告 -shared:指定生成动态链接库。 -static:指定生成静态链接库。 -fPIC:表示编译为位置独立的代码,用于编译共享库。目标文件需要创建成位置无关码,概念上就是在可执行程序装载它们的时候,它们可以放在可执行程序的内存里的任何地方。
用户2929716
2018/08/23
1.5K0
gcc用法以及静态/动态链接
静态链接-空间与地址分配
当我们有两个目标文件时,如何将它链接起来成一个可执行文件?这个过程发生了什么?这基本上就是链接的核心内容:静态链接。 我们以使用下面源文件“a.c”和“b.c"作为例子展开分析: /*a.c*/ extern int shared; int main() { int a=100; swap(&a, &shared); } /*b.c*/ int shared = 1; void swap(int *a, int *b) { *a ^= *b ^= *a ^= *b; } 我们首先将
233333
2018/04/23
1.9K0
静态链接-空间与地址分配
编译动态链接库DLL后,查看DLL内函数名及改名方法
 可以看到动态链接库内部的一个函数名为sum,因为这里是X64的DLL所以函数名正常,如果是X86的DLL可能需要修改函数名,修改方法如下:
Ning@
2021/11/10
2.1K0
编译动态链接库DLL后,查看DLL内函数名及改名方法

相似问题

从dll链接静态成员

10

静态链接到dll文件

10

如何静态链接MFC扩展DLL?

11

WPF -DLL的静态链接

20

DLL比静态链接慢吗?

42
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文