powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Qt + C библиотека = ошибка локали
9 сообщений из 9, страница 1 из 1
Qt + C библиотека = ошибка локали
    #38534180
PitBull
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем доброго времени суток.

Пытаю добавить iperf3 в свой Qt проект. Qt 4.8.5. Система OpenSuse 13.1.

Инклуды как и положено лежат в extern "C". Причём, если либу прикрепить к обычному С++ проекту, всё в порядке, а вот если к Qt проекту, вылетает куча ошибок локалью.

Ошибки:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
g++ -c -pipe -g -Wall -W -D_REENTRANT -DQT_WEBKIT -DQT_GUI_LIB -DQT_CORE_LIB -DQT_SHARED -I/usr/share/qt4/mkspecs/linux-g++ -I../lperftest -I/usr/include/QtCore -I/usr/include/QtGui -I/usr/include -I../lperf/include -I. -I../lperftest -I. -o main.o ../lperftest/main.cpp
In file included from /usr/include/c++/4.8/x86_64-suse-linux/bits/c++locale.h:41:0,
from /usr/include/c++/4.8/bits/localefwd.h:40,
from /usr/include/c++/4.8/string:43,
from /usr/include/QtCore/qstring.h:54,
from /usr/include/QtCore/qobject.h:48,
from /usr/include/QtCore/QObject:1,
from ../lperftest/main.cpp:9:
/usr/include/c++/4.8/clocale:53:11: error: '::lconv' has not been declared
using ::lconv;
^
/usr/include/c++/4.8/clocale:54:11: error: '::setlocale' has not been declared
using ::setlocale;
^
/usr/include/c++/4.8/clocale:55:11: error: '::localeconv' has not been declared
using ::localeconv;
^
In file included from /usr/include/c++/4.8/bits/localefwd.h:40:0,
from /usr/include/c++/4.8/string:43,
from /usr/include/QtCore/qstring.h:54,
from /usr/include/QtCore/qobject.h:48,
from /usr/include/QtCore/QObject:1,
from ../lperftest/main.cpp:9:
/usr/include/c++/4.8/x86_64-suse-linux/bits/c++locale.h:52:23: error: 'uselocale' was not declared in this scope
extern "C" __typeof(uselocale) __uselocale;
^
/usr/include/c++/4.8/x86_64-suse-linux/bits/c++locale.h:52:45: error: invalid type in declaration before ';' token
extern "C" __typeof(uselocale) __uselocale;
^
/usr/include/c++/4.8/x86_64-suse-linux/bits/c++locale.h: In function 'int std::__convert_from_v(__locale_struct* const&, char*, int, const char*, ...)':
/usr/include/c++/4.8/x86_64-suse-linux/bits/c++locale.h:75:53: error: '__gnu_cxx::__uselocale' cannot be used as a function
__c_locale __old = __gnu_cxx::__uselocale(__cloc);
^
/usr/include/c++/4.8/x86_64-suse-linux/bits/c++locale.h:100:33: error: '__gnu_cxx::__uselocale' cannot be used as a function
__gnu_cxx::__uselocale(__old);
^
../lperftest/main.cpp: At global scope:
../lperftest/main.cpp:11:5: warning: unused parameter 'argc' [-Wunused-parameter]
int main(int argc, char *argv[])
^
../lperftest/main.cpp:11:5: warning: unused parameter 'argv' [-Wunused-parameter]
make: *** [main.o] Error 1


По мне, видать конфликтуют инклуды, понять бы какие. Заранее всем спасибо.
...
Рейтинг: 0 / 0
Qt + C библиотека = ошибка локали
    #38534257
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PitBull,

Может быть, покажешь всё же код ?
...
Рейтинг: 0 / 0
Qt + C библиотека = ошибка локали
    #38534270
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
пока идея такая, что ты что-то сломал в системных инклюдах. Идея бредовая, но пока другой нет.

Ты включаешь в ../lperftest/main.cpp:9:
файл заголовок QObject

и он жалуется в

/usr/include/c++/4.8/clocale:53:11:

в системном заголовке, что не определен символ

lconv

error: '::lconv' has not been declared

, тоже системный.


Вывод: либо ты что-то в системных заголовках сломал, либо ты какими-то дефайнами CRT законфигурил так, что твоя программа не может быть скомпилирована.

Т.е. идея 2 -- попробовать убрать -D_REENTRANT
...
Рейтинг: 0 / 0
Qt + C библиотека = ошибка локали
    #38534331
PitBull
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Система только что поставлены, кроме этого проекта проблем нигде нет.

Исходники:
в про файле подключение
Код: xml
1.
2.
LIBS += -L$$PWD/../bin/ -llperf
INCLUDEPATH += $$PWD/../lperf/include



исходники кода:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
#include <stddef.h>
#include <stdint.h>
#include <sys/select.h>

extern "C" {
    #include <iperf_api.h>
}

#include <QtCore/QObject>

int main(int argc, char *argv[])
{
    struct iperf_test *test;
    test = iperf_new_test();

    return 0;
}



При наличии инклуда QtCore/QObject вылетает ошибка, убираем инклуд, всё работает.
...
Рейтинг: 0 / 0
Qt + C библиотека = ошибка локали
    #38534378
PitBull
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivВывод: либо ты что-то в системных заголовках сломал, либо ты какими-то дефайнами CRT законфигурил так, что твоя программа не может быть скомпилирована.

Т.е. идея 2 -- попробовать убрать -D_REENTRANT

Спасибо, буду копать в эту сторону.
...
Рейтинг: 0 / 0
Qt + C библиотека = ошибка локали
    #38534590
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот это:


Код: plaintext
1.
2.
3.
extern "C" {
    #include <iperf_api.h>
}




ты ЗРЯ делаешь.

Это должно делаться ВНУТРИ этого заголовка. Это ЕГО ответственность, а не твоя.

Это тоже может влиять на работоспособность твоего проекта.

(т.е. попробуй убрать extern "C" ).
...
Рейтинг: 0 / 0
Qt + C библиотека = ошибка локали
    #38534629
PitBull
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivВот это:


Код: plaintext
1.
2.
3.
extern "C" {
    #include <iperf_api.h>
}




ты ЗРЯ делаешь.

Это должно делаться ВНУТРИ этого заголовка. Это ЕГО ответственность, а не твоя.

Это тоже может влиять на работоспособность твоего проекта.

(т.е. попробуй убрать extern "C" ).

Пробовал убрать - не помогает. Пробовал перенести в iperf_api.h - не помогает.
...
Рейтинг: 0 / 0
Qt + C библиотека = ошибка локали
    #38534738
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PitBull,

Скорее всего iperf_api.h из себя включает <locale.h> который конфликтует с С++-ной реализацией <clocale>. Возможно у них перекрываются какие-то макросы.

В качестве идеи: Попробуйте в main.cpp переставить С++ заголовки перед С.

ЗЫ. Ничего плохого в таком коде нет
Код: plaintext
1.
2.
3.
extern "C" {
    #include <iperf_api.h>
}


И для чистых С библиотек это единственный способ использовать их в С++ (переписывание заголовка чужой библиотеки не допустимо).
...
Рейтинг: 0 / 0
Qt + C библиотека = ошибка локали
    #38541176
PitBull
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Проблему решил. Как оказалось, походу из-за одинаковых названий файлов и ифдефоф библиотечная locale конфликтовала с системной. Переименовал файл и всё полетело. Всем спасибо.
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Qt + C библиотека = ошибка локали
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]