C++ 符号引用错误
当我使用g++thread.cpp-o thread-lpthread编译时,我遇到了这个错误,我似乎找不到引用错误:C++ 符号引用错误,c++,pthreads,posix,semaphore,C++,Pthreads,Posix,Semaphore,当我使用g++thread.cpp-o thread-lpthread编译时,我遇到了这个错误,我似乎找不到引用错误: Undefined first referenced symbol in file sem_destroy /var/tmp//ccfHWR7G.o sem_init /var/
Undefined first referenced
symbol in file
sem_destroy /var/tmp//ccfHWR7G.o
sem_init /var/tmp//ccfHWR7G.o
sem_post /var/tmp//ccfHWR7G.o
sem_wait /var/tmp//ccfHWR7G.o
ld: fatal: symbol referencing errors. No output written to thread
collect2: ld returned 1 exit status
我的头文件只包含一些全局变量和函数名:
#ifndef THREAD_H_
#define THREAD_H_
#define NUM_THREADS 6
#include <pthread.h>
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <iostream>
#include <semaphore.h>
#include <fstream>
#include <unistd.h>
using namespace std;
sem_t SEM;
fstream of;
pthread_t thread[NUM_THREADS];
pthread_attr_t attr;
int rc;
long t;
void *status;
void *Busy_Work(void *t);
void Open_Initialize_File();
void Initialize_Set_Attribute();
void Create_Thread();
void Free_Attricutes_Wait();
#endif /* THREAD_H_ */
\ifndef线程_
#定义线程_
#定义NUM_线程6
#包括
#包括
#包括
#包括
#包括
#包括
#包括
#包括
使用名称空间std;
扫描电镜;
流;
pthread_t thread[NUM_THREADS];
pthread_attr_t attr;
int rc;
长t;
无效*状态;
void*Busy_工作(void*t);
void Open_Initialize_File();
无效初始化_集_属性();
void Create_Thread();
void Free_Attricutes_Wait();
#endif/*螺纹*/
这是我的主文件,请使用IDE检查,我没有遗漏任何基本语法:
#include "thread.h"
int main (int argc, char *argv[]) {
Open_Initialize_File();
Initialize_Set_Attribute();
Create_Thread();
Free_Attricutes_Wait();
sem_destroy(&SEM);
cout << "Main: program completed" << endl << "Exiting" << endl;
pthread_exit(NULL);
}
void Open_Initialize_File() {
of.open("SHARED.txt");
of << pthread_self() << "\r" << endl;
of.close();
}
void Initialize_Set_Attribute() {
sem_init(&SEM, 0, 1);
pthread_attr_init(&attr);
pthread_attr_setdetachstate(&attr,PTHREAD_CREATE_JOINABLE);
}
void Create_Thread() {
for (int t = 0; t < NUM_THREADS; t++) {
rc = pthread_create(&thread[t], &attr, Busy_Work, (void *)(t+1));
if (rc) {
cout << "ERROR: return code from pthread_create() is " << rc << endl;
exit(-1);
}
}
}
void *Busy_Work(void *t) {
int i;
long tid = (long)t;
for (i=0; i<10; i++)
{
sem_wait(&SEM);
cout << "Thread" << tid << "Thread id< " << pthread_self() << " >running..." << endl;
of.open("SHARED.txt",std::fstream::app);//opening file in append mode
of << pthread_self() << "\r" << endl;
of.close();
sem_post(&SEM);
if(tid%2==0)
sleep(2);
else
sleep(3);
}
pthread_exit((void*) t);
}
void Free_Attricutes_Wait() {
pthread_attr_destroy(&attr);
for (t = 0; t < NUM_THREADS; t++) {
rc = pthread_join(thread[t], &status);
if (rc) {
cout << "ERROR: return code from pthread_join() is" << rc << endl;
exit(-1);
}
cout << "Thread " << t << " Thread id <" << pthread_self() << ">exited" << endl;
}
}
#包括“thread.h”
int main(int argc,char*argv[]){
打开_初始化_文件();
初始化_Set_属性();
创建_线程();
自由属性等待();
sem_破坏(&sem);
cout链接器缺少一些符号,这可能表明还需要链接其他外部库。在unix平台上,解决此问题的一个好方法是查看手册页:
曼西莫尼特酒店
这通常会告诉您需要做什么。在这种情况下,它会指定您需要与-lrt链接。链接器缺少一些符号,这可能表明还需要链接其他外部库。在unix平台上,解决此问题的一个好方法是查看手册页:
曼西莫尼特酒店
这通常会告诉您需要做什么。在这种情况下,它会指定您需要与-lrt链接。链接器缺少一些符号,这可能表明还需要链接其他外部库。在unix平台上,解决此问题的一个好方法是查看手册页:
曼西莫尼特酒店
这通常会告诉您需要做什么。在这种情况下,它会指定您需要与-lrt链接。链接器缺少一些符号,这可能表明还需要链接其他外部库。在unix平台上,解决此问题的一个好方法是查看手册页:
曼西莫尼特酒店
这通常会告诉您需要做什么。在这种情况下,它会指定您需要链接到-lrt错误意味着链接器找不到指定的符号。您可能需要链接到其他库,如rt(-lrt).你在哪个平台上工作?@mwijns Unix是我在工作的on@mwijns我添加了-lrt并编译了它,虽然它运行正常,但没有创建.txt文件检查您打开的文件流是否正常,我认为您还需要指定std::fstream::out。错误意味着链接器找不到指定的符号。您可能需要链接到附加库,如rt(-lrt).你在哪个平台上工作?@mwijns Unix是我在工作的on@mwijns我添加了-lrt并编译了它,虽然它运行正常,但没有创建.txt文件检查您打开的文件流是否正常,我认为您还需要指定std::fstream::out。错误意味着链接器找不到指定的符号。您可能需要链接到附加库,如rt(-lrt).你在哪个平台上工作?@mwijns Unix是我在工作的on@mwijns我添加了-lrt并编译了它,虽然它运行正常,但没有创建.txt文件检查您打开的文件流是否正常,我认为您还需要指定std::fstream::out。错误意味着链接器找不到指定的符号。您可能需要链接到附加库,如rt(-lrt)。您正在使用什么平台?@mwijns Unix是我正在使用的on@mwijns我添加了-lrt并编译了它,尽管它运行良好,但没有创建.txt文件检查您打开的文件流是否正常,我认为您还需要指定std::fstream::out。