【发布时间】:2011-01-09 20:26:45
【问题描述】:
我来自 UNIX 世界,我对 Linux、Solaris、Cygwin 非常熟悉 和 MinGW 开发。最近我移植了我的一个 支持 MSVC 的大项目 (cppcms), 包括使用 CMake 构建静态和动态库。
而且我总是遇到非常奇怪的问题:
- 我有CMake build issues 因为Windows 编程 lacks naming convention 用于导入和静态库。
-
现在我发现我应该根据 我做的实际构建(调试/RelWithDebInfo - 应该使用调试 ICU,发布版本 ICU),所以我应该 根据 MSVC 下的调试/发布模式仅更改搜索库的实际约定。 否则应用程序将不会开始在缺少 DLL 时给出错误。
在使用 GCC 的 Mingw 或 Cygwin、使用 Sun Studio 的 Open Solaris 或使用 gcc 或 intel 编译器的 Linux 下,我没有任何此类问题。
-
我仍然有很多有线问题和有线错误以及非常奇怪的行为——即使是一些微不足道的事情也不起作用 在 MSVC 构建下,当在 Solaris/Linux/Cygwin/Mingw 下使用 3.4 到 4.4 的 GCC 一切正常时, Sun Studio 和 Intel 编译器)。但不在 MSVC 下。
说实话,我不知道如何处理最后一个!因为在我看来它更像是环境问题。
我知道这个问题并没有很好地定义。我觉得我很有经验 开发人员和我知道如何编写可移植且良好的 C++ 代码。但是使用 Microsoft native 工具让我对我不知道如何解决的问题发疯。
问题:经验丰富的 Unix 程序员在 Win32 API 基础上应该知道什么时候 开始使用正版 Microsoft 工具?
P.S.:有人能解释一下为什么“带有调试信息的发布”需要调试版本的 MSVC 运行时吗?为什么存在两个版本的runtime?
P.P.S.:请注意,我对 Win32 API 没有问题,实际上 Windows GCC 构建工作绝对正常。
说明:
我正在寻找来自 Unix 世界的程序员可能会陷入的陷阱。
例如,从 Linux 迁移到 Solaris:确保使用 -mt 或
-pthreads 使用多线程程序时,用 -lpthread 链接是不够的。
【问题讨论】:
-
我使用 Microsoft Visual Studio 2008 Express Edition(免费版)我没有钱购买完整版,尤其是开源项目。
-
没有什么特别要知道的。两者都会因为不同的原因让你发疯......
-
什么是有线错误和有线问题?
-
我的意思是普通代码无法与所有其他编译器/平台一起使用。程序有时会在简单的任务上崩溃。难以解释。需要深入调试...
-
您的意思可能是“怪异”,而不是“有线”?!如有请更正。
标签: unix winapi build visual-c++ cmake