什么应该让Unix程序员知道使用Microsoft Tools?

Art*_*yom 3 unix winapi build cmake visual-c++

我来自UNIX世界,我对Linux,Solaris,Cygwin和MinGW开发非常熟悉.最近我移植了一个支持MSVC的大项目(cppcms),包括使用CMake构建静态和动态库.

我总是得到绝对奇怪的问题:

  1. 我有CMake构建问题,因为Windows编程 缺少 导入和静态库的命名约定.
  2. 现在我发现我应该根据我做的实际构建使用不同版本的ICU(调试/发布版本)(Debug/RelWithDebInfo - 应该使用Debug ICU,Release release ICU),所以我应该根据实际的搜索库更改实际约定在MSVC下调试/释放模式.否则应用程序只是不会开始在丢失的DLL上给出错误.

    我在Mingw或Cygwin下使用GCC,使用Sun Studio的Open Solaris或使用gcc或intel编译器的Linux下没有任何此类问题.

  3. 而且我仍然有许多有线问题和有线错误以及非常奇怪的行为 - 甚至一些微不足道的事情在MSVC构建下都无法工作,当Solaris/Linux/Cygwin/Mingw在使用GCC从3.4到4.4,Sun Studio的一切正常工作时和英特尔编译器).但不是在MSVC下.

    说实话,我不知道如何处理最后一个!因为对我来说它更像是环境问题.

我知道问题的定义并不是很明确.我认为我是一个非常有经验的开发人员,我知道如何编写可移植的和良好的C++代码.但是使用微软的原生 工具让我疯狂,因为我不知道如何解决这些问题.

问:我应该有经验的Unix程序员在Win32 API的相当不错的基础它开始使用正版Microsoft工具时,应该知道吗?

PS:有人可以解释为什么"Release With Debug Info"需要调试版本的MSVC运行时?为什么存在两个版本的运行时

PPS:请注意我没有Win32 API的问题,实际上Windows GCC构建工作正常.

澄清:

我正在寻找来自Unix世界的程序员可能陷入的陷阱.

例如,从Linux迁移到Solaris时:确保使用-mt-pthreads使用多线程程序编译代码时,使用-lpthread链接是不够的.

Ale*_*ski 6

PS:有人可以解释为什么"Release With Debug Info"需要调试版本的MSVC运行时?

它没有.

为什么存在两个版本的运行时?

因为调试版本会进行更多的错误检查.

而且我仍然有许多有线问题和有线错误以及非常奇怪的行为 - 即使是一些微不足道的东西在MSVC构建下也不起作用,

* What am I doing wrong?
Run Code Online (Sandbox Code Playgroud)

没有告诉我们你得到的" 有线问题和有线错误以及非常奇怪的行为 ".

* Where should I start?
Run Code Online (Sandbox Code Playgroud)

通过告诉我们您遇到的具体错误和问题.

* What do I miss?
Run Code Online (Sandbox Code Playgroud)

阅读文档并学习工具.

如果你的问题是"我怎么读才能成为一名优秀的Windows程序员?" 那么我的答案是:一切从杰夫·里克特,作为一个开始.

  • @Artyom:祝贺你承认自己的无知.这是一个好的开始.现在问一些具体的问题,你的无知将会得到缓解. (3认同)