Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Ошибка при сборки сторонней библиотеки. 
:(
    Опции темы
OlegIT
Дата 21.3.2022, 22:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 683
Регистрация: 5.4.2006

Репутация: нет
Всего: нет



Собираю библиотеку db-18.1.40 компилятором mngw32 в консоли, CMake-ом создал make файл. На 60% получаю ошибку
Цитата

[ 60%] Building C object CMakeFiles/BerkeleyDB.dir/src/mutex/mut_win32.c.obj
In file included from C:/db-18.1.40/src/dbinc/mutex.h:15,
                 from C:/db-18.1.40/build_windows/db_int.h:1293,
                 from C:\db-18.1.40\src\mutex\mut_win32.c:12:
C:\db-18.1.40\src\mutex\mut_win32.c: In function '__db_win32_mutex_lock':
C:/db-18.1.40/src/dbinc/mutex_int.h:371:28: error: expected '(' before '{' token
 #define MUTEX_PAUSE  {__asm{_emit 0xf3}; __asm{_emit 0x90}}
                            ^
C:\db-18.1.40\src\mutex\mut_win32.c:176:4: note: in expansion of macro 'MUTEX_PAUSE'
    MUTEX_PAUSE
    ^~~~~~~~~~~
C:/db-18.1.40/src/dbinc/mutex_int.h:371:29: error: '_emit' undeclared (first use in this function); did you mean '_exit'?
 #define MUTEX_PAUSE  {__asm{_emit 0xf3}; __asm{_emit 0x90}}
                             ^~~~~
C:\db-18.1.40\src\mutex\mut_win32.c:176:4: note: in expansion of macro 'MUTEX_PAUSE'
    MUTEX_PAUSE
    ^~~~~~~~~~~

Т.е. компилятор не знает, что такое _emit. Правильно я понимаю?
Компилятор поставил не старый
Цитата

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++17")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=c99")

В инете нашёл упоминание, что народ собирает эту библиотеку с помощью mngw32, но такой ошибки не упоминается. Как её победить?

PM MAIL   Вверх
xvr
Дата 23.3.2022, 17:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 60
Всего: 223



Синтаксис __asm {} явно не от gcc (а mingw это именно он). Вангую по наличию в пути /build_windows/ что предполагается сборка Микрософтовским компилятором. Нужно смотреть в сорцы самой библиотеки и cmakefile'ов, подо что он заточен

PM MAIL   Вверх
OlegIT
Дата 23.3.2022, 21:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 683
Регистрация: 5.4.2006

Репутация: нет
Всего: нет



gcc  у меня определено, картинка в приложении.
Много там вокруг всяких ifdef стоит. Есть там, рядом, то что нужно, по моему
Цитата

#ifdef HAVE_MUTEX_WIN32_GCC
#define    MUTEX_PAUSE  __asm__ volatile ("rep; nop" : : );

Понял, что в определение дефайнов разбираться нужно.

Присоединённый файл ( Кол-во скачиваний: 3 )
Присоединённый файл  1.png 24,72 Kb
PM MAIL   Вверх
OlegIT
Дата 24.3.2022, 08:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 683
Регистрация: 5.4.2006

Репутация: нет
Всего: нет



Похоже понял, где у меня ошибка, прочитал документацию про эти дефайны. Нужно дополнительно определить конкретную реализацию мьютекса так --with-mutex=x86/gcc-assembly .
Но как это сделать через CMakeList.txt пока не знаю.

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1083 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.