Articles of 移植

一般C ++ Linux到Windows的移植问题

背景:基于networking的服务( tcp+udp ,不是http )存在即将公开发布的C++ linux客户端API。 这个客户端API使用普通的tcp套接字,udp套接字,C ++命名空间和部分stl std::map和std::vector ,并将作为一组头文件和.a和.lib文件进行链接。 问题:刚开始考虑将这个C ++客户端API移植到Windows将需要什么。 在Windows下使用gcc / g ++有意义吗? 我的第一个倾向是这是行不通的,因为Windows上的开发人员通常使用Microsoft Visual Studio套件,他们将无法链接到由gcc生成的库。 这是一个正确的假设,还是海湾合作委员会提供一些漂亮的开关,产生微软编译器和微软链接器兼容的输出文件?

Cygwin不支持glibc

Cygwin常见问题解答有关于“glibc在哪里? :Cygwin不提供glibc。 它使用newlib,它提供了很多(但不是全部)相同的function。 将glibc移植到Cygwin将会很困难。 我很惊讶,并检查了发行包,因为我以前使用过它。 当我检查存储库时,glibc似乎确实是cygwin的一部分,直到2.10版本。 任何人都可以告诉glibc后续版本的移植难度吗?

壳牌转移程序 – 这是什么?

在shell中,我们有命令转移,但是我在一些例子中看到了它的转移3 为什么有一个class后的数字? 和它有什么关系? 它能做什么 ? 例: echo “arg1= $1 arg2=$2 arg3=$3” shift echo “arg1= $1 arg2=$2 arg3=$3” shift echo “arg1= $1 arg2=$2 arg3=$3” shift echo “arg1= $1 arg2=$2 arg3=$3” shift 输出将是: arg1= 1 arg2=2 arg3=3 arg1= 2 arg2=3 arg3= arg1= 3 arg2= arg3= arg1= arg2= arg3= 但是当我补充说,它不正确显示它。

Linux中有STDCALL吗?

我试图将一个Windows应用程序移植到Linux。 这个appplication用__stdcall属性标记了一些函数。 然而,我有一个朋友告诉我,stdcall只用于windows,在linux中没有任何意义(但在Windows GCC中是否存在)。 我试图searchGoogle,并得到了一些结果表明,Linux中有stdacll。 那么……? 此外,对于GCC,我看到了2个实现: __attribute__((__stdcall__))和__attribute__((stdcall)) (没有stdcall附近的下划线)。 哪一个是首选的(如果适用于Linux)? 谢谢!

在Linux中等待WaitForSingleObject和WaitForMultipleObjects

我正在从Windows到Linux迁移应用程序。 我WaitForSingleObject和WaitForMultipleObjects接口的问题。 在我的应用程序中,我产生了多个线程,其中所有线程都等待来自父进程的事件,或者每t秒周期运行一次。 我已经检查了pthread_cond_timedwait ,但是我们必须为此指定绝对时间。 我怎么能在Unix中实现这个?

什么可以代替端口上的glob_t和glob()到Windows?

我有这样的代码片段的代码: #include <glob.h> glob_t globBuf; const int result = glob(remoteFileName.c_str(), 0, 0, &globBuf); if (result == GLOB_NOSPACE) { … } else if (result == GLOB_NOMATCH) { … } else { … } 但是我没有在windows上findglob.h 我将在Microsoft Windows上使用什么来提供等同的function来从Linux移植此代码?

需要将MS Visual C ++移植到Linux G ++

我想先说我是计算生物物理学家,而不是软件工程师,所以我的编程知识仅限于科学计算(我使用C ++,Matlab和R)。 最近我被要求从MS Visual C ++移植一个庞大的代码包(〜10,000行)到Linux,在那里我开发了一些代码。 他们知道我在写Linux,直到一年之后,他们才告诉我,他们希望在Windows中与旧代码集成。 说实话,我不知道从哪里开始。 我能够将MakeFile放在一起并成功编译,但是我得到了一个分割错误,经过valgrind调查后,可能与数百个pipe理不当的内存分配有关。 有没有一个好的地方给我开始,不需要我学习微软的Visual C ++只是为了得到这个在Linux的工作? 任何帮助将不胜感激。 谢谢! 编辑:感谢迄今为止所有的帮助。 我绝对是“真正的”编程的新手,所以我甚至不清楚如何描述我的问题。 感谢您的理解并提供一些很好的起点。

什么是摆脱“警告C4267可能的数据丢失”的最佳策略?

我将一些遗留代码从win32移植到win64。 不是因为win32对象的大小对于我们的需要来说太小了,而是因为win64现在更加标准化了,我们希望把我们所有的环境都移植到这种格式(我们还使用了一些第三方库,在64位上提供比在32位上更好的性能) 。 我们结束了吨; 警告C4267:“参数”:从“size_t”转换为“…”,可能会丢失数据 主要由于代码如: unsigned int size = v.size(); 其中v是STL容器。 我知道为什么这个警告是有道理的,我知道为什么发出这个警告,以及如何修复这个警告。 然而,在这个特定的例子中,我们从来没有遇到过去容器大小超过unsigned int的最大值的情况….所以当代码移植到64位环境时,没有理由出现这个问题。 我们讨论了抑制这些嘈杂警告的最佳策略是什么(它们可能隐藏了一个我们将会错过的相关内容),但是我们无法对这个恰当的策略做出决定。 所以我在这里问这个问题,最好的推荐策略是什么? 1.使用static_cast 使用static_cast 。 做unsigned int size = static_cast<unsigned int>(v.size()); 。 我不喜欢这样做,因为我们放弃了64位的function来将大量的数据存储在一个容器中。 但是,因为我们的代码从来没有达到32位的限制,所以这似乎是一个安全的解决scheme… 2.用size_treplaceunsigned int 这是绝对困难的,因为在上面的例子中, unsigned int size对象可以用于其他函数,保存为class属性,然后删除单行警告可能会导致数百个代码更改… 3.禁用警告 这很可能是一个非常糟糕的主意,因为它也会在这种情况下禁用警告uint8_t size = v.size()这肯定可能会导致数据丢失…. 4.定义一个“安全演员”*function并使用它 类似于 : template <typename From, typename To> To safe_cast( const From& value ) { […]

Linux和Windows之间的移植工作如何?

如果一个特定的软件被运行在一个平台上,并且程序员/公司/任何想把它移植到另一个平台上,那究竟做了什么? 我的意思是,他们只是重写Linux或Windows特定的引用到另一个相当于? 或者是一个完整的重写需要? 试图了解是什么让它成本太高,以至于很多主要的厂商不把他们的软件移植到Linux上(特别是在考虑Adobe) 谢谢

将Winsock移植到Linux套接字

我有一个使用Winsock进行networking连接的程序,现在我们的要求之一是将程序移植到Linux上。 唯一阻止我们这样做的是Winsock。 我的问题是:我可以轻松地将它转移到Linux实现吗? 是否有任何我应该知道的陷阱,如果我只是简单地包含适当的头文件,我将不得不处理什么样的事情? 谢谢你的帮助! 我会张贴代码,但由于法律原因,我不能遗憾。 但是,我们的代码确实使用了以下内容: WSAStartup(..) WSACleanup(..) Socket(..) sendto(..) recvfrom(..) ioctlsocket(..) setsocketopt(..)