【紧急】C sharp 怎样“静态编译”Windows应用窗口程序

【紧急】C sharp 怎样“静态编译”Windows应用窗口程序,第1张

1.静态编译QT,使程序可以将静态库的形式使用QT,这个好办,在configure.exe 程序的参数下,给上-static参数即可。

2.QT使用了VC的链接库也要静态链接。这个就有点难办了,因为QT默认的使用方式是动态的,不过,有了前人的研究就好办了,打开<qt-

install-dir>\mkspecs\win32-msvc2005\qmake.conf文件(VS2005,如果是VC6,则是<qt-install-dir>\mkspecs\win32-msvc\qmake.conf,

VS2003:<qt-install-dir>\mkspecs\win32-msvc.net\qmake.conf,相信现在没有人用VS2002吧),将下面两行:

QMAKE_CFLAGS_RELEASE = -O2 -MD

QMAKE_CFLAGS_DEBUG = -Zi -MDd

改为:

QMAKE_CFLAGS_RELEASE = -O2 -MT

QMAKE_CFLAGS_DEBUG = -Zi -MTd

就好了。这是VS2005的示例,如果你是其他版本的VS,则会有些区别,但只要将MD(动态)改为MT(静态),将MDD(动态调试)改为MTD(静

态调试),就好了。

如果你有多个版本的VS安装在系统上,则在configure.exe的命令行参数给上-platform win32-msvc2005,就可以使用VS2005编译了,其他的VS

版本可以在README中找到:

win32-g++

win32-icc (commercial edition only)

win32-msvc (commercial edition only)

win32-msvc.net (commercial edition only)

win32-msvc2005 (commercial edition only)

改好了,就可以用 configure -platform win32-msvc2005 -debug-and-release -static -fast -qt-sql-sqlite 来配置系统了。

首先,传统的编译,也就是

静态编译

是把

源文件

翻译成目标文件,这个是一次性过程,也就是你所谓的静态编译。

后来的Java和.NET等语言,首先编译成中间形式,然后运行过程中根据需要编译成本地代码(注意这个过程不是一次性的,下次运行重新编译),这个就是JIT(即时编译)技术,从即时编译发展出了动态编译技术

————————————

(传统的)编译完成后,像C/C++、Fortran、汇编等语言,可以把多个目标文件合并到一个

库文件

中,这个就是静态库。比如常说的

库函数

printf就是libc里面的函数。

如果有了启动函数(main),main里面使用了printf,就可以通过

静态链接

技术,从libc中提取出printf所在的文件加入到可执行文件中,如果printf还需要其它函数,就继续搜索并加入列表,直到形成一个

闭包

。这个就是静态链接。

可是静态链接有个明显的缺点,如果每个程序都需要printf,那么printf这个函数的代码就会同时存在在每个程序中,这样也太占地方了吧。所以发明了动态连接技术,其实有两种形式。无论哪一种,都是首先记录下需要调用printf这个函数以及所在的

动态库

,等到运行的时候再加载动态库,从动态库中找到真正的printf去执行。

由于,

动态链接

技术需要一些额外的信息,传统的静态库是不具备的,这些额外信息主要是重复加载和卸载时所需要的一些代码,因此需要

动态链接库

使用opencv需要编译源码,得到库文件。可以用cmake构建项目后编译,也可以直接用官方提供的编译好的版本。 官方提供的编译库一般只是标准版本,没有附加某些库,比如tbb等,要想让opencv使用tbb等库,就只能自己构建项目后编译。


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/11125468.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-13
下一篇2023-05-13

发表评论

登录后才能评论

评论列表(0条)

    保存