Linux에서 pthread_create에 대한 참조가 정의되지 않았습니다.
https://computing.llnl.gov/tutorials/pthreads/에서 다음 데모를 웹에서 찾았습니다.
#include <pthread.h>
#include <stdio.h>
#define NUM_THREADS 5
void *PrintHello(void *threadid)
{
long tid;
tid = (long)threadid;
printf("Hello World! It's me, thread #%ld!\n", tid);
pthread_exit(NULL);
}
int main (int argc, char *argv[])
{
pthread_t threads[NUM_THREADS];
int rc;
long t;
for(t=0; t<NUM_THREADS; t++){
printf("In main: creating thread %ld\n", t);
rc = pthread_create(&threads[t], NULL, PrintHello, (void *)t);
if (rc){
printf("ERROR; return code from pthread_create() is %d\n", rc);
exit(-1);
}
}
pthread_exit(NULL);
}
그러나 Ubuntu Linux 9.04를 실행하고 있는 머신에서 컴파일하면 다음 오류가 발생합니다.
corey@ubuntu:~/demo$ gcc -o term term.c
term.c: In function ‘main’:
term.c:23: warning: incompatible implicit declaration of built-in function ‘exit’
/tmp/cc8BMzwx.o: In function `main':
term.c:(.text+0x82): undefined reference to `pthread_create'
collect2: ld returned 1 exit status
에 「」가 포함되어 있기 은 전혀 가 없습니다.pthread.h
에는)가 .pthread_create
뭐가 잘못됐는지?가가 잘못 ???
Linux의 경우 올바른 명령어는 다음과 같습니다.
gcc -pthread -o term term.c
및 합니다.또한 라이브러리에는 소스 및 오브젝트가 포함되어 있습니다.-lpthread
'무엇을 하다'「」만이 .libpthread.a
완료 인스톨 완료.
gcc -lpthread ...
링크에 실패합니다.
Linux의 경우 올바른 명령어는 다음과 같습니다.
gcc -o term term.c -lpthread
- 컴파일 명령어 바로 뒤에 -lpthread를 입력해야 합니다.이 명령어는 pthread.h 라이브러리로 프로그램을 실행하도록 컴파일러에 지시합니다.
- gcc -l은 라이브러리 파일과 링크합니다.lib 프리픽스가 없는 라이브러리 이름을 가진 링크 -l.
는 이렇게 덧붙이는 이라고 생각합니다.pthread
CMake
과 같이 되어 있습니다.
find_package (Threads REQUIRED)
target_link_libraries(helloworld
${CMAKE_THREAD_LIBS_INIT}
)
cmake 를 사용하고 있는 경우는, 다음을 사용할 수 있습니다.
add_compile_options(-pthread)
또는
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pthread")
Linux 터미널에서 실행 중 다음 명령을 사용하여 컴파일했습니다(컴파일하는 c파일을 test.c라고 합니다).
gcc -o test test.c -pthread
도움이 됐으면 좋겠네요!
일식이 되어
속성 -> c/c++빌드 -> 설정 -> GCC C++ 링커 -> 라이브러리 상단에 "pthread" 추가
다음과 같이 컴파일합니다.gcc demo.c -o demo - pthread
에서 Visual Studio 2019를 합니다.-pthread
프로젝트 속성 페이지에서 다음을 참조하십시오.
링커 -> 명령줄 -> 기타 옵션
형식 입력에-pthread
그 textbox에.텍스트 상자에 입력합니다.
실제로 다음 튜토리얼을 계속 읽으면 pthreads 코드에 사용되는 컴파일명령어의 예를 아래 표에 나타냅니다.
https://computing.llnl.gov/tutorials/pthreads/ # 컴파일 중
(MSVS 코드를 사용하여) 어느 대답도 요구를 충족시키지 못했기 때문에, 이 IDE 및 CMAKE 빌드 툴에 대한 제 경험도 여기에 추가하겠습니다.
순서 1: .cpp(필요한 경우 .hpp)에 다음 내용이 포함되어 있는지 확인합니다.
#include <functional>
순서 2 MSVScode IDE 사용자의 경우:다음 행을 c_cpp_properties.json 파일에 추가합니다.
"compilerArgs": ["-pthread"],
스텝 2 CMAKE 빌드툴 사용자의 경우:이 행을 CMake Lists에 추가합니다.txt
set(CMAKE_CXX_FLAGS "-pthread")
주의: 플래그를 -lpthread(-pthread 대신) 추가하면 링크에 실패합니다.
man 페이지를 체크하면 얻을 수 있습니다.
컴파일하여 -pthread로 링크합니다.
SYNOPSIS
#include <pthread.h>
int pthread_create(pthread_t *thread, const pthread_attr_t *attr,
void *(*start_routine) (void *), void *arg);
Compile and link with -pthread.
....
Anjuta에서 Build 메뉴로 이동한 다음 Configure Project로 이동합니다.[ Configure Options ]박스에서 다음을 추가합니다.
LDFLAGS='-lpthread'
누군가에게도 도움이 되었으면 좋겠는데...
프리티시에 "pthread"만 추가하면 됩니다=> C/C++ build=>GCC C++ Linker=> Libraries=> 상단 "Libraries(-l)" 바로 그것
당신은 옵션을사용해야 합니다는 옵션을 사용할 필요가 있다.-lpthread
gcc.gcc를 사용합니다.
여러 라이브러리를 사용하는 경우 라이브러리 종속성을 확인할 수 있습니다.(예: -lpthread -lSDL...<==> ...-lSDL -lpthread)
부터부터man gcc
,,
-pthread
Define additional macros required for using the POSIX threads library.
You should use this option consistently for both compilation and linking.
This option is supported on GNU/Linux targets,
most other Unix derivatives,
and also on x86 Cygwin and MinGW targets.
그것은 맞는 말이다 정확하다-pthread
어쩔 수 없는 옵션과 최고의 이 문제를 해결할 방법.이 문제를 해결할 수 있는 최선의 방법입니다.약간의 대답의 진술이 다르면 컴파일된 코드를 생성하고 있다.일부 답변에는 다른 컴파일된 코드를 생성한다는 문구가 있습니다.이 그릇된 것입니다.이건오해의 소지가 있다.
만약 당신이 복제하고 싶은 경우를 복제하고 싶다.-pthread
,, 를사용할 수 있습니다 사용할 수 있다.-lpthread -D_REENTRANT=1
두 -pthread
★★★★★★ 。
실제로 많은 답변이 표현하고 있는 것처럼 pthread 라이브러리와 링크되어 있습니다.또한 pthread 라이브러리의 순서는 일부 약한 기호를 덮어쓸 수 있기 때문에 중요합니다.따라서 올바른 버전은-lpthread
명령줄에 여러 번 입력해야 할 수 있습니다.
다른 은 ' 낫다'입니다._REENTRANT
네임스페이스는 네임스페이스에 이는 구현 네임스페이스에 있습니다.휴대성을 중시하는 사람도 있고 그렇지 않은 사람도 있을 수 있습니다.그러나 컴파일 단위에서 가장 먼저 정의되는 것이 매우 중요합니다.이 기호는 많은 시스템 헤더 파일을 구문 분석하는 방법을 변경합니다.
하다, 하다, 하다, 하다를 넣을 수 요.#define _REENTRANT 1
모든 소스 파일의 맨 위에 표시되지만 명령줄에 저장하는 것이 훨씬 쉽습니다. 한 번 말씀드리지만-pthread
가장 좋은 방법이라고 생각합니다.ㅇㅇㅇㅇ.gcc
는, 장래의 실장 방법을 바꿀 가능성이 있습니다.하지만 프로그래머들이 무슨 일이 일어나고 있는지 이해하는 것이 중요하다고 생각합니다.
term.c: 함수 'main'에서: term.c:23: 경고: 내장 함수 'exit'에 대한 호환되지 않는 암시적 선언
는 절대 넣지 않았어.<stdlib.h>
서, snowledge.exit()
에서는 _REENTRANT가하지 않다고 합니다.리엔트랜트라고 합니다.
따라서 다른 코드를 생성하지 않습니다.즉, 컴파일러의 백엔드는 다르지 않습니다.이것은 조건부 컴파일과 다른 라이브러리로의 링크일 뿐입니다.이 옵션을 사용했기 때문에 '잠금 없는' 코드를 생성하거나 적절한 기계 장벽을 추가하지 않습니다.
언급URL : https://stackoverflow.com/questions/1662909/undefined-reference-to-pthread-create-in-linux
'programing' 카테고리의 다른 글
프로젝트에 vuetify를 추가하는 동안 오류가 발생했습니다. (0) | 2022.08.13 |
---|---|
vuex를 사용하여 ajax api-module 로드, 저장 및 새로고침 (0) | 2022.08.13 |
C/C#/C++에서 역루프를 실행하는 가장 좋은 방법은 무엇입니까? (0) | 2022.08.13 |
Vue + Webpack 스테이징/프리프로덕션 구성 (0) | 2022.08.13 |
Vue 유닛 테스트:소품, vuex 스토어, 워처, 게터 등을 사용하여 복잡한 컴포넌트를 테스트하는 방법 (0) | 2022.08.13 |