大家好,请问编译后不要mingwm10.dll的方式? Topic is solved
大家好,请问编译后不要mingwm10.dll的方式?
我在使用单线程编译时,即没有使用-mthreads 时,编译后的可执行文件不需要mingwm10.dll就可单独运行,但是,我做多线程的工程时,加入了-mthreads标志后,编译的结果在运行时要求mingwm10.dll文件存在。
请问,如何能编译出不依赖mingwm10.dll文件就可运行的目标文件?
谢谢。
请问,如何能编译出不依赖mingwm10.dll文件就可运行的目标文件?
谢谢。
*** china ***
应该是-mthread引起了gcc相关选项的重设。
你试试在-mthread之后,加上-static和-static-libgcc试试。
-Utensil
你试试在-mthread之后,加上-static和-static-libgcc试试。
-Utensil
In fascination of creating worlds by words, and in pursuit of words behind the world.
On Github: http://utensil.github.com
Technical Blog in Chinese: http://utensil.iteye.com/
On Github: http://utensil.github.com
Technical Blog in Chinese: http://utensil.iteye.com/
已经加了,还是不行,我用CB编译了一下,就可以不依赖Dll文件了,但,我从CB的选项看了看,也没发现什么特别的地方。我是用makefile编译的,我不知道如何将cb的编译选项生成makefile文件。Utensil wrote:应该是-mthread引起了gcc相关选项的重设。
你试试在-mthread之后,加上-static和-static-libgcc试试。
-Utensil
今天在网上搜了下,发现mingwm10.dll文件的使用确实和多线程有关,也有人提出人工的解决方案,参看:http://www.nabble.com/Removing-dependen ... 82051.html
但是CB确没有这样,编译后也不再需要mingwm10.dll文件,不知道是怎样做的。
*** china ***
CB其实是需要的,如果你直接从bin下面那个运行,你就会发现它报缺dll。如果你用Ctrl+F10运行是感觉不到的。CB是使用了自己的mingwm10.dll来帮你运行。
P.S.你那个链接给我一个启示,静态链接是不能良好地处理C++异常的,而多线程又需要异常处理,所以……(我指的是-static-libgcc而不是-static,两者有本质不同)
-Utensil
P.S.你那个链接给我一个启示,静态链接是不能良好地处理C++异常的,而多线程又需要异常处理,所以……(我指的是-static-libgcc而不是-static,两者有本质不同)
-Utensil
In fascination of creating worlds by words, and in pursuit of words behind the world.
On Github: http://utensil.github.com
Technical Blog in Chinese: http://utensil.iteye.com/
On Github: http://utensil.github.com
Technical Blog in Chinese: http://utensil.iteye.com/
这算是解决了?
我用CB编译完后,都是在另一个没有安装过MinGW的系统中运行的。确定是可以正常运行的。另外,我也使用了-static-libgcc参数。当然,还是不行。
不过,我在网上搜索的时候,有几篇关于MingW+QT的开发环境设置中提到要去掉-mthreads参数来达到不依赖mingwm10.dll文件,开始我没太在意,因为我用的不是Qt,再者我已经使用多线程,所以我觉得不能去掉-mthreads参数,但刚才我试了一下去掉了编译和连接中的-mthreads参数,居然编译过了,而且可以不依赖mingwm10.dll文件运行了?????!!!!! 难道这就是解决方案?!
进一步的测试结果是,我可以在编译的参数中加入-mthreads参数,但不能在连接的参数中加入-mthreads参数,否则编译的目标文件在运行时就要求mingwm10.dll文件。
有兴趣的可帮我试一下。另外,要感谢大家的帮助!此问题,还可继续讨论。如果有什么新的进展,我还会续贴的。
再次感谢大家的讨论,希望共同提高。
我用CB编译完后,都是在另一个没有安装过MinGW的系统中运行的。确定是可以正常运行的。另外,我也使用了-static-libgcc参数。当然,还是不行。
不过,我在网上搜索的时候,有几篇关于MingW+QT的开发环境设置中提到要去掉-mthreads参数来达到不依赖mingwm10.dll文件,开始我没太在意,因为我用的不是Qt,再者我已经使用多线程,所以我觉得不能去掉-mthreads参数,但刚才我试了一下去掉了编译和连接中的-mthreads参数,居然编译过了,而且可以不依赖mingwm10.dll文件运行了?????!!!!! 难道这就是解决方案?!
进一步的测试结果是,我可以在编译的参数中加入-mthreads参数,但不能在连接的参数中加入-mthreads参数,否则编译的目标文件在运行时就要求mingwm10.dll文件。
有兴趣的可帮我试一下。另外,要感谢大家的帮助!此问题,还可继续讨论。如果有什么新的进展,我还会续贴的。
再次感谢大家的讨论,希望共同提高。
*** china ***
原来是这样,虽然不明白为什么~学习了~
P.S.可是我的CB编译的静态exe需要dll.....5555....
-Utensil
In fascination of creating worlds by words, and in pursuit of words behind the world.
On Github: http://utensil.github.com
Technical Blog in Chinese: http://utensil.iteye.com/
On Github: http://utensil.github.com
Technical Blog in Chinese: http://utensil.iteye.com/
为了说明问题,我将标准的例子threads放到cb工程里,编译成功不需要dll文件的。斑竹可试一下。
- Attachments
-
- thread_test_bc.part2.rar
- (202.45 KiB) Downloaded 284 times
-
- thread_test_bc.part1.rar
- (512 KiB) Downloaded 281 times
我测试了你的程序,发现的确是不需要mingwm10.dll文件的。我又用C::B编了自己的程序,发现也不需要dll……
因为我发现需要是大约半年前的事情了,后来我就几乎没用静态版本了,那时用的那时的SVN版本,可能的确是版本问题。呵呵~我一直都紧跟最新的C::B的~
现在由于我的程序经常要在2.8.7和trunk间都作测试,而且要测试Bakefile生成的Makefile没问题,所以很少用C::B来编译了,主要用它编辑和调试。
-Utensil
因为我发现需要是大约半年前的事情了,后来我就几乎没用静态版本了,那时用的那时的SVN版本,可能的确是版本问题。呵呵~我一直都紧跟最新的C::B的~
现在由于我的程序经常要在2.8.7和trunk间都作测试,而且要测试Bakefile生成的Makefile没问题,所以很少用C::B来编译了,主要用它编辑和调试。
-Utensil
In fascination of creating worlds by words, and in pursuit of words behind the world.
On Github: http://utensil.github.com
Technical Blog in Chinese: http://utensil.iteye.com/
On Github: http://utensil.github.com
Technical Blog in Chinese: http://utensil.iteye.com/