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 的指点。
艾弗
我在 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 的指点。
艾弗