gpt4 book ai didi

c++ - 在 Qt 项目中使用 sem_t

转载 作者:行者123 更新时间:2023-11-30 04:38:50 25 4
gpt4 key购买 nike

我正在 Qt (C++) 中进行模拟,并且想使用我为 sem_t 类型制作的信号量包装器类。

虽然我在包装类中包含了 semaphore.h,但运行 qmake 会出现以下错误:

'sem_t 没有命名类型'

我认为这是一个库/链接错误,因为我可以从命令行毫无问题地编译该类。

我读到您可以指定要在编译期间包含的外部库。但是,我 a) 不确定如何在项目文件中执行此操作,并且 b) 不确定要包含哪个库才能访问 semaphore.h。

如有任何帮助,我们将不胜感激。

谢谢,

汤姆

这是供引用的包装类:

信号量.h

#ifndef SEMAPHORE_H
#define SEMAPHORE_H

#include <semaphore.h>

class Semaphore {
public:
Semaphore(int initialValue = 1);
int getValue();
void wait();
void post();

private:
sem_t mSemaphore;
};

#endif

信号量.cpp

#include "Semaphore.h"

Semaphore::Semaphore(int initialValue) {
sem_init(&mSemaphore, 0, initialValue);
}

int Semaphore::getValue() {
int value;
sem_getvalue(&mSemaphore, &value);
return value;
}

void Semaphore::wait() {
sem_wait(&mSemaphore);
}

void Semaphore::post() {
sem_post(&mSemaphore);
}

以及 QT 项目文件:

TARGET = RestaurantSimulation
TEMPLATE = app
QT +=
SOURCES += main.cpp \
RestaurantGUI.cpp \
RestaurantSetup.cpp \
WidgetManager.cpp \
RestaurantView.cpp \
Table.cpp \
GUIFood.cpp \
GUIItem.cpp \
GUICustomer.cpp \
GUIWaiter.cpp \
Semaphore.cpp
HEADERS += RestaurantGUI.h \
RestaurantSetup.h \
WidgetManager.h \
RestaurantView.h \
Table.h \
GUIFood.h \
GUIItem.h \
GUICustomer.h \
GUIWaiter.h \
Semaphore.h
FORMS += RestaurantSetup.ui
LIBS +=

完整的编译器输出:

g++ -c -pipe -g -gdwarf-2 -arch i386 -Wall -W -DQT_GUI_LIB -DQT_CORE_LIB -DQT_SHARED -  
I/usr/local/Qt4.6/mkspecs/macx-g++ -I. -
I/Library/Frameworks/QtCore.framework/Versions/4/Headers -I/usr/include/QtCore -
I/Library/Frameworks/QtGui.framework/Versions/4/Headers -I/usr/include/QtGui -
I/usr/include -I. -I. -F/Library/Frameworks -o main.o main.cpp

In file included from RestaurantGUI.h:10,
from main.cpp:2:
Semaphore.h:14: error: 'sem_t' does not name a type
make: *** [main.o] Error 1
make: Leaving directory `/Users/thauburger/Desktop/RestaurantSimulation'
Exited with code 2.
Error while building project RestaurantSimulation
When executing build step 'Make'

最佳答案

我能够使用 qmake 编译和链接您的信号量类,没有任何意外步骤(包括在 rtpthread 库中链接) .我创建了以下主要内容:

#include "Semaphore.h"

int main(int argc, char* argv[])
{
Semaphore sem;
return 0;
}

然后我使用 qmake -project 生成了以下项目文件:

######################################################################
# Automatically generated by qmake (2.01a) Mon May 24 12:50:02 2010
######################################################################

TEMPLATE = app
TARGET =
DEPENDPATH += .
INCLUDEPATH += .

# Input
HEADERS += Semaphore.h
SOURCES += main.cpp Semaphore.cpp

无论您看到什么错误,都是由您的 Semaphore 类以外的其他原因引起的。我建议您仔细查看您的 RestaurantGUI.h 文件。您可能需要查看预处理的输出(gcc 的 -E 标志)以了解实际情况。

注意:我建议将您的信号量文件重命名为适用于不区分大小写的文件系统(例如 Windows)的名称。

关于c++ - 在 Qt 项目中使用 sem_t,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2899604/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com