j*******o 发帖数: 246 | 1 请教各位一个问题:老板让我把一个很大的linux工程转换成c++,然后再融入我们自己
windows平台下的代码中。我一开始就被复杂的头文件给难住了,感觉linux下头文件的
路径关系和windows下的不一样。而且代码页不是放在一起的。各位有没有什么建议?
我是EE的PhD,编程很一般,所以没啥好想法。。。 |
r*****z 发帖数: 906 | 2 没有什么自动的办法,硬来吧
【在 j*******o 的大作中提到】 : 请教各位一个问题:老板让我把一个很大的linux工程转换成c++,然后再融入我们自己 : windows平台下的代码中。我一开始就被复杂的头文件给难住了,感觉linux下头文件的 : 路径关系和windows下的不一样。而且代码页不是放在一起的。各位有没有什么建议? : 我是EE的PhD,编程很一般,所以没啥好想法。。。
|
j*******o 发帖数: 246 | 3 好几百头文件。。。超大一个机器人控制系统。。。要杀人啊。。。
【在 r*****z 的大作中提到】 : 没有什么自动的办法,硬来吧
|
N****w 发帖数: 21578 | 4 有些是两边都有的,比如 stdio.h
【在 j*******o 的大作中提到】 : 好几百头文件。。。超大一个机器人控制系统。。。要杀人啊。。。
|
a9 发帖数: 21638 | 5 cygwin?
【在 j*******o 的大作中提到】 : 请教各位一个问题:老板让我把一个很大的linux工程转换成c++,然后再融入我们自己 : windows平台下的代码中。我一开始就被复杂的头文件给难住了,感觉linux下头文件的 : 路径关系和windows下的不一样。而且代码页不是放在一起的。各位有没有什么建议? : 我是EE的PhD,编程很一般,所以没啥好想法。。。
|
j*******o 发帖数: 246 | 6 这么简单的我还是知道。基本的C++编程知识还是有的。问题是他有一些头文件,如
#include "filters/mean.h"
在windows下根本找不到。。。感觉文件系统都是不一样的。
【在 N****w 的大作中提到】 : 有些是两边都有的,比如 stdio.h
|
j*******o 发帖数: 246 | 7 要把代码融入到自己的windows平台下的程序中。。。所以cygwin不行。
【在 a9 的大作中提到】 : cygwin?
|
N****w 发帖数: 21578 | 8 linux 下的都有源码。。全搬过去编译就是了
【在 j*******o 的大作中提到】 : 这么简单的我还是知道。基本的C++编程知识还是有的。问题是他有一些头文件,如 : #include "filters/mean.h" : 在windows下根本找不到。。。感觉文件系统都是不一样的。
|
r*****z 发帖数: 906 | 9 filters/mean.h意味着含有这条include指令的文件和一个叫filters的目录平级,
而该目录下有mean.h这个文件。这样的目录结构当然要保留了
问题比较大的在于那些linux平台特有的头文件,包括一些linux系统调用的头文件和
GUI相关的。这二者,尤其是后者,才是你移植起来的最大障碍
【在 j*******o 的大作中提到】 : 这么简单的我还是知道。基本的C++编程知识还是有的。问题是他有一些头文件,如 : #include "filters/mean.h" : 在windows下根本找不到。。。感觉文件系统都是不一样的。
|
S*A 发帖数: 7142 | 10 这个恐怕要一点一点自己改。
Linux 的头文件有很多在 windows 下面编译不过去的。
就算编译过去了到了 linking 那一部也可能会说 symbol 找不到。
你就看缺什么把缺的移过去。
应该也没有那么可怕,因为很多基础的头文件搞定了
以后,很多文件都可以共享这个结果的。虽然有几百
个文件,可能需要改动的部分并没有那么多。 |
|
|
N****w 发帖数: 21578 | 11 lz 肯定搞不定
找个 cs 的人合作一下比较好
【在 r*****z 的大作中提到】 : filters/mean.h意味着含有这条include指令的文件和一个叫filters的目录平级, : 而该目录下有mean.h这个文件。这样的目录结构当然要保留了 : 问题比较大的在于那些linux平台特有的头文件,包括一些linux系统调用的头文件和 : GUI相关的。这二者,尤其是后者,才是你移植起来的最大障碍
|
r****t 发帖数: 10904 | 12 这种事学生物的都能搞,没有 GUI 的不是很难。
【在 N****w 的大作中提到】 : lz 肯定搞不定 : 找个 cs 的人合作一下比较好
|
i**h 发帖数: 424 | 13 Compile code into a DLL with the help from cygwin (all required posix libs
can be statically linked). Then call the DLL from your win32 main program. |
S*A 发帖数: 7142 | 14 I don't think that is going to work. The gcc C++ symbol naming
is not even compatible with different g++ versions, not to
mention MS C. You can link it, but you can't reference the
C++ symbol correctly.
【在 i**h 的大作中提到】 : Compile code into a DLL with the help from cygwin (all required posix libs : can be statically linked). Then call the DLL from your win32 main program.
|
i**h 发帖数: 424 | 15 There is always chance OP doesn't need access to individual classes or
members but just some global functions (oftentimes it's true). In that case
no C++ classes need to be exported. Quite a few GNU projects are ported to
win32 in this way.
【在 S*A 的大作中提到】 : I don't think that is going to work. The gcc C++ symbol naming : is not even compatible with different g++ versions, not to : mention MS C. You can link it, but you can't reference the : C++ symbol correctly.
|
S*A 发帖数: 7142 | 16 If the source code is writtne in C++, then it needs to have
C API in order to do that. If there is no C API, you have to write
one.
BTW, I think you want to do that in mingw instead of gywin. All
cygwin compile require cygwin.dll. I don't think you can compile
in cywin and static link cygwin.dll. I did not try it myself.
Any one knows better please correct me.
case
【在 i**h 的大作中提到】 : There is always chance OP doesn't need access to individual classes or : members but just some global functions (oftentimes it's true). In that case : no C++ classes need to be exported. Quite a few GNU projects are ported to : win32 in this way.
|
h***i 发帖数: 1970 | 17 哪那么容易,看代码复杂程度,两个系统不一样的东西太多了,随便举例,windows没
fork,没pthread(这个倒是可以找个open source的),很多posix的东西windows都没有
,你以为为了支持多系统的程序,那些ifdef是写着玩的? 计算机系能都搞定的都不多。
【在 r****t 的大作中提到】 : 这种事学生物的都能搞,没有 GUI 的不是很难。
|
r****t 发帖数: 10904 | 18 多线程多进程是要多点。楼主是 C++, 不是 C, 不一定就涉及这些。
多。
【在 h***i 的大作中提到】 : 哪那么容易,看代码复杂程度,两个系统不一样的东西太多了,随便举例,windows没 : fork,没pthread(这个倒是可以找个open source的),很多posix的东西windows都没有 : ,你以为为了支持多系统的程序,那些ifdef是写着玩的? 计算机系能都搞定的都不多。
|
r****t 发帖数: 10904 | 19 这些是你那个系统自己带的,在 windows 里面是找不到。
【在 j*******o 的大作中提到】 : 这么简单的我还是知道。基本的C++编程知识还是有的。问题是他有一些头文件,如 : #include "filters/mean.h" : 在windows下根本找不到。。。感觉文件系统都是不一样的。
|
d*********8 发帖数: 2192 | 20 概念要清楚。
头文件至少有三类。
system/kernel api, 比如read() write()。WINDOWS是支持大部分POSIX的,所以不用
担心。但是除了POSIX之外,还有很多LINUX/UNIX独有的。比如fork()。你不用CYWIN的
话,想移植这个跟自己做个CYWIN也差不了多少了。也可以用一些可移植的库,比如
APACHE 的APR, poco等等,但是估计要大动源代码了。
第二类 c runtime
这个所有C/C++编译器都支持,只是各家的扩展略有不同。比如STDIO.H就是这类。
第三类:程序自己的东西,比如filter\mean.h这个就得你自己去修改编译参数,让编
译器找到这个文件。
总之,不用CYWIN或者可移植库,假定源代码在20000行的话,工作量跟你重新写差不多。
你可以参考那些在UNIX/WINDOWS下都有的开源软件,比如squid, apache看看他们是怎
么做的。 |
|
|
S*A 发帖数: 7142 | 21 说的都很对,
就是 port 20K LOC 不用cygwin 和重写差不多?这个我觉得不至于。
porting 的很多问题都是纸老虎,刚开始编译几万个错误。
一些基本的东西 fix 了以后错误就急剧下降了。因为很多都是抱怨
同样的错。
Open source 很多都是用 autoconf/automake 那一套的,但是如果就
是 port到 windows 的话,应该用不上。 automake 超级复杂,我很不
喜欢用。我自己的项目都不用 automake 的。手写 Makefile 好多了。
【在 d*********8 的大作中提到】 : 概念要清楚。 : 头文件至少有三类。 : system/kernel api, 比如read() write()。WINDOWS是支持大部分POSIX的,所以不用 : 担心。但是除了POSIX之外,还有很多LINUX/UNIX独有的。比如fork()。你不用CYWIN的 : 话,想移植这个跟自己做个CYWIN也差不了多少了。也可以用一些可移植的库,比如 : APACHE 的APR, poco等等,但是估计要大动源代码了。 : 第二类 c runtime : 这个所有C/C++编译器都支持,只是各家的扩展略有不同。比如STDIO.H就是这类。 : 第三类:程序自己的东西,比如filter\mean.h这个就得你自己去修改编译参数,让编 : 译器找到这个文件。
|
z*******6 发帖数: 133 | 22 试试用 automake,cmake等, 先把 project/solution 搞出来。
然后参考刚才上上贴对header file 的处理。一步步来,有些头文件对应的列表,可以
在网络上搜搜,比如 unistd.h, sys/*.h, dirent.h; 第三方的库也要准备好。
几个问题如果系统中没有用的话,还是可以很快完成的。
1. GUI,如果有motif xwin 等的界面,试试用 QT
2. 如果有opengl, 需要用 glew, regular expression 也需要单独的库
3. 如果有遇到share memory/semaphore 的部分,需要重新做
4. 如果有文件io 的低级操作的部分,要重来
5. 如果有遇到 signal 的处理的部分,估计要重来。
6. 。。。 |
L*1 发帖数: 11537 | 23
Agree. I also do not like automake stuff, making simple things more
complicated for people like me.
【在 S*A 的大作中提到】 : 说的都很对, : 就是 port 20K LOC 不用cygwin 和重写差不多?这个我觉得不至于。 : porting 的很多问题都是纸老虎,刚开始编译几万个错误。 : 一些基本的东西 fix 了以后错误就急剧下降了。因为很多都是抱怨 : 同样的错。 : Open source 很多都是用 autoconf/automake 那一套的,但是如果就 : 是 port到 windows 的话,应该用不上。 automake 超级复杂,我很不 : 喜欢用。我自己的项目都不用 automake 的。手写 Makefile 好多了。
|