Ошибка линковки через pragma [закрыт]

98
21 сентября 2021, 14:20
Закрыт. Этот вопрос необходимо уточнить или дополнить подробностями. Ответы на него в данный момент не принимаются.

Хотите улучшить этот вопрос? Добавьте больше подробностей и уточните проблему, отредактировав это сообщение.

Закрыт 1 год назад.

Улучшить вопрос

Использую 2 библиотеки в своем проекте: libyara и yaracpp. Пытаюсь подключить через pragma:

#pragma comment ("lib", "yaracpp_x86_sd")
#pragma comment ("lib", "libyara_x86_sd")

Получаю ошибки линковки: Пробую вот так:

#pragma comment ("lib", "yaracpp_x86_sd.lib")
#pragma comment ("lib", "libyara_x86_sd.lib")

Поведение такое-же.

Однако, если подключить эти библиотеки через настройки линковщика: То сборка происходит успешно. Правда с рядом предупреждений:

1>------ Build started: Project: ScanService, Configuration: Debug         Win32 ------
1>LINK : warning LNK4098: defaultlib 'MSVCRT' conflicts with use of 
other libs; use /NODEFAULTLIB:library
1>LINK : warning LNK4217: symbol '__dclass' defined in 'libucrtd.lib(nan.obj)' is imported by 'libyara_x86_sd.lib(value.obj)' in function '_json_real'
1>LINK : warning LNK4217: symbol '__errno' defined in 'libucrtd.lib(errno.obj)' is imported by 'libyara_x86_sd.lib(load.obj)' in function '_json_load_file'
1>LINK : warning LNK4286: symbol '__errno' defined in 'libucrtd.lib(errno.obj)' is imported by 'libyara_x86_sd.lib(strconv.obj)'
1>LINK : warning LNK4217: symbol '___acrt_iob_func' defined in 'libucrtd.lib(_file.obj)' is imported by 'libyara_x86_sd.lib(load.obj)' in function '_json_loadf'
1>LINK : warning LNK4217: symbol '_fclose' defined in 'libucrtd.lib(fclose.obj)' is imported by 'libyara_x86_sd.lib(load.obj)' in function '_json_load_file'
1>LINK : warning LNK4217: symbol '_fgetc' defined in 'libucrtd.lib(fgetc.obj)' is imported by 'libyara_x86_sd.lib(load.obj)' in function '_json_loadf'
1>LINK : warning LNK4217: symbol '_fopen' defined in 'libucrtd.lib(fopen.obj)' is imported by 'libyara_x86_sd.lib(load.obj)' in function '_json_load_file'
1>LINK : warning LNK4217: symbol '___stdio_common_vsprintf' defined in 'libucrtd.lib(output.obj)' is imported by 'libyara_x86_sd.lib(load.obj)' in function '_error_set'
1>LINK : warning LNK4286: symbol '___stdio_common_vsprintf' defined in 'libucrtd.lib(output.obj)' is imported by 'libyara_x86_sd.lib(error.obj)'
1>LINK : warning LNK4286: symbol '___stdio_common_vsprintf' defined in 'libucrtd.lib(output.obj)' is imported by 'libyara_x86_sd.lib(strconv.obj)'
1>LINK : warning LNK4217: symbol '_strtoll' defined in 'libucrtd.lib(strtox.obj)' is imported by 'libyara_x86_sd.lib(load.obj)' in function '_lex_scan_number'
1>LINK : warning LNK4217: symbol '_strerror' defined in 'libucrtd.lib(strerror.obj)' is imported by 'libyara_x86_sd.lib(load.obj)' in function '_json_load_file'
1>LINK : warning LNK4217: symbol '__time64' defined in 'libucrtd.lib(time.obj)' is imported by 'libyara_x86_sd.lib(hashtable_seed.obj)' in function '_generate_seed'
1>LINK : warning LNK4217: symbol '_strncpy' defined in 'libucrtd.lib(strncpy.obj)' is imported by 'libyara_x86_sd.lib(hashtable.obj)' in function '_hashtable_set'
1>LINK : warning LNK4286: symbol '_strncpy' defined in 'libucrtd.lib(strncpy.obj)' is imported by 'libyara_x86_sd.lib(error.obj)'
1>LINK : warning LNK4217: symbol '_strtod' defined in 'libucrtd.lib(strtod.obj)' is imported by 'libyara_x86_sd.lib(strconv.obj)' in function '_jsonp_strtod'
1>LINK : warning LNK4217: symbol '_localeconv' defined in 'libucrtd.lib(localeconv.obj)' is imported by 'libyara_x86_sd.lib(strconv.obj)' in function '_jsonp_dtostr'

Папка с библиотеками подключена, и они в ней:

Настраивать линковку в настройках Visual Studio не вариант, так как в зависимости от конфигурации и платформы для сборки линкуются разные версии библиотек, которые разворачиваются в макросах в pragma, что очень удобно, и настраивать отдельный файл для каждой конфигурации каждого проекта неразумно.

Answer 1

Почему о вас "lib" вдруг взято в кавычки вот здесь

#pragma comment ("lib", "yaracpp_x86_sd")
#pragma comment ("lib", "libyara_x86_sd")

?

Подключение библиотек через #pragma comment делается через

#pragma comment(lib, ...)
READ ALSO
Скажите правильно ли я думаю-Матрица c++

Скажите правильно ли я думаю-Матрица c++

Изначально имел код который выводил матрицу

76
Не правильно работает меню на C++ [закрыт]

Не правильно работает меню на C++ [закрыт]

Хотите улучшить этот вопрос? Обновите вопрос так, чтобы он вписывался в тематику Stack Overflow на русском

71
Как сделать проверку заполнения одного из полей?

Как сделать проверку заполнения одного из полей?

Есть форма, валидация происходит через плагин jquery validation plugin

81
Как понять строчку (JQuery) кода $(".filter > div*[filter !='"+$(this).attr('filter')+"']")

Как понять строчку (JQuery) кода $(".filter > div*[filter !='"+$(this).attr('filter')+"']")

На странице есть кнопки которые определенным образом фильруют картинкиПо нажатию одной из 4 кнопок, срабатывает фильтр и несколько картинок...

87