ACE(自适应通信框架)wirh QT 和 MSVC2013 (VC12)

ACE (adaptive comminucations framework) wirh QT and MSVC2013 (VC12)

我在 Windows 上使用 ACE 时遇到问题(在 OS-X 和 Linux(Ubuntu 上使用它都非常成功)。它崩溃了ACE_OS::thread_mutex_lock (ACE_thread_mutex_t *m) 函数。

OS 是 Windows 7 64 位。 不过,我正在构建一个 32 位应用程序(尝试过 64 位)。 我按照 http://www.dre.vanderbilt.edu/~schmidt/DOC_ROOT/ACE/ACE-INSTALL.html#win32 来构建 ACE 的 32 位库。 ACE 版本为 6.4.0。 ACE_vc12.sln 是用 VS2013_express 构建的。 我的应用程序(使用 ACE 在 OS-X 上运行)是使用 QT5.7.0(32 位版本)构建的,套件配置为使用 MSCV2013 32 位配置。

我在 QT 中的项目 .pro 文件看起来像这样(有一些混淆):

`QT += core
QT += gui
CONFIG += debug
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
ACE = c:/ACE_wrappers
PathToIs = //Users/xxx/Dropbox/_Projects/xxx/is/yyy
LIBS = -L$$ACE/lib -lACEd -lpthread
TARGET = ZZZ_CSCI
include($$PathToIs/lib/ace.pri)
include($$PathToIs/Some_other.pri)
include($$PathToIs/Yet_another_pri.pri)
INCLUDEPATH += $$PathToIs/lib/shared
INCLUDEPATH += $$PathToIs/lib/utilities
TEMPLATE = app
SOURCES += main.cpp \
../../../../../lib/utilities/windows/UtilitiesWindows.cpp
HEADERS += \
$$PathToIs/lib/shared/GlobalDefs.h \
../../../../../lib/utilities/Utilities.h
INCLUDEPATH += C:/ACE_wrappers/include
DEPENDPATH += C:/ACE_wrappers/include`

-lpthread 导致找不到库 link 错误。 我应该在 Windows 中使用什么(我相信这是 linux osx 特定的库)?

LINK : fatal error LNK1104: cannot open file 'pthread.lib'

出于绝望,我完全删除了 -lpthread,这当然消除了 linker 错误,但是当应用程序启动时,我在下面的函数中崩溃了:

ACE_OS::thread_mutex_lock (ACE_thread_mutex_t *m)
{
  // ACE_OS_TRACE ("ACE_OS::thread_mutex_lock");
#if defined (ACE_HAS_THREADS)
# if defined (ACE_HAS_WTHREADS)
  ::EnterCriticalSection (m);
  return 0;
# else
  return ACE_OS::mutex_lock (m);
# endif /* ACE_HAS_WTHREADS */
#else
  ACE_UNUSED_ARG (m);
  ACE_NOTSUP_RETURN (-1);
#endif /* ACE_HAS_THREADS */
}

QT中调试器的光标指向::EnterCriticalSection (m);

所以我的推论是 windows 中需要一些 pthread 库才能使 ACE 正常运行,但我不知道在哪里可以找到,更重要的是,不知道要寻找什么。

任何指导将不胜感激。

问候 艾弗

所以在网上搜索了一下之后,我看到一家 GlobeTOM 公司使用 ACE,我碰巧认识其中一位所有者。给他打了个电话,他们表示他们为 Windows.

使用了 pthreads

所以从 WWWW 上看到的,我实际上也已经尝试过了。知道那条路应该行得通,帮了大忙。

这里用的是最新的文件,dll放在Windows/System32,lib和include文件放在MSVC2013的VC文件夹里。我使用的是 32 位库。

然后还编辑了 .pro 以包含库。实际上,我在 QT 中右键单击项目并 selected "Add library",然后 selected "external library" 并浏览到 .lib 文件。这会将部分添加到 .pro 文件中。如果您需要,select 有一些特定的选项。

因此要使用的库是 pthreadVC.lib。

感谢 GlobeTOM 的指点。

艾弗