Я довольно новичок в программировании на C++ и использую pthreads. Я перекрестно компилирую свой код для OpenWRT, но по какой-то причине у меня возникает ошибка сегментации, когда я запускаю программу на своей плате, но она отлично работает на моем ПК. Я подозреваю, что ошибка возникает на этапе компоновки компиляции, потому что я пробовал небольшую программу на C и работал нормально. Также, если я изменю имя файла на .cpp и скомпилирую его с помощью g ++, он также работает.Компиляция C++ с использованием -pthreads для Openwrt Linux-Get segmentation fault
#include <pthread.h>
#include <stdio.h>
#include <stdlib.h>
void *run(void *dummyPtr) {
printf("I am a thread...\n");
return NULL;
}
int main(int argc, char **argv) {
printf("Main start...\n");
pthread_t connector;
pthread_create(&connector, NULL, run, NULL);
printf("Main end...\n");
return 0;
}
Выход из затмения компилятора:
**** Build of configuration Release for project ThreadTest ****
make all
Building file: ../src/ThreadTest.cpp
Invoking: GCC C++ Compiler
mipsel-linux-g++ -O3 -Wall -c -fmessage-length=0 -MMD -MP -MF"src/ThreadTest.d" -MT"src/ThreadTest.d" -o"src/ThreadTest.o" "../src/ThreadTest.cpp" -lpthread
mipsel-linux-g++: -lpthread: linker input file unused because linking not done
Finished building: ../src/ThreadTest.cpp
Building target: ThreadTest
Invoking: GCC C++ Linker
mipsel-linux-g++ -o"ThreadTest" ./src/ThreadTest.o -lpthread -static
Finished building target: ThreadTest
Edit: Убрана старый код и поместить в новом простом примере. Этот код запускается, если я скомпилирую его как программу на C, но нет, если я скомпилирую его как программу на C++. Я запускаю ядро 2.6.26.3 на плате.
Не уверен, что это был просто поспешный пример pgm, но после комментирования материала камеры он просто зависает в моей системе.После добавления некоторых операторов pthread_join() он, по крайней мере, завершил выполнение. Я понятия не имею, связано ли это с вашей исходной проблемой, но возможно, что на вашей плате main() выйдет до завершения потоков. – Duck
Код работает нормально на моем компьютере под управлением Ubuntu. Но когда я компилирую его для Openwrt, он, похоже, не входит в основную, потому что я не вижу выход «Main start ...». Проблема, похоже, связана с компилятором C++, поскольку она работает, если я использую компилятор C – Stulli