Правильное использование функций переменных аргументов C API с реализацией C++ ⇐ C++
-
Гость
Правильное использование функций переменных аргументов C API с реализацией C++
Я хочу использовать библиотеку журналирования C++ в приложении, смешанном на C/C++. Устаревшее приложение полно журналов в стиле printf. Новая библиотека также поддерживает это.
Файлы C скомпилированы с помощью компилятора C, поэтому я не могу включить в них заголовки журналирования C++.
Я пытаюсь создать библиотеку C++ с заголовками в стиле C и исходным файлом C++:
//logger.h внешний "С" { extern void RS_LOG_INFO_PRIVATE(const char* fmt, ...); #define LOG_INFO(...) RS_LOG_INFO_PRIVATE(__VA_ARGS__) } //logger.cpp #include "logger.h" #include #include шаблон void RS_LOG_INFO_PRIVATE(const char* fmt, Args&&... args) { AWS_LOG_DEBUG(fmt, std::forward(args)...); } //основной файл #include "logger.h" интервал основной() { LOG_INFO("тест %s", "я"); } Я получаю неопределенную ссылку на «RS_LOG_INFO_PRIVATE».
nm -C также подтверждает это:
U RS_LOG_INFO_PRIVATE(char const*, ...) Есть ли решение этой проблемы или мне следует изменить свой подход?
Я хочу использовать библиотеку журналирования C++ в приложении, смешанном на C/C++. Устаревшее приложение полно журналов в стиле printf. Новая библиотека также поддерживает это.
Файлы C скомпилированы с помощью компилятора C, поэтому я не могу включить в них заголовки журналирования C++.
Я пытаюсь создать библиотеку C++ с заголовками в стиле C и исходным файлом C++:
//logger.h внешний "С" { extern void RS_LOG_INFO_PRIVATE(const char* fmt, ...); #define LOG_INFO(...) RS_LOG_INFO_PRIVATE(__VA_ARGS__) } //logger.cpp #include "logger.h" #include #include шаблон void RS_LOG_INFO_PRIVATE(const char* fmt, Args&&... args) { AWS_LOG_DEBUG(fmt, std::forward(args)...); } //основной файл #include "logger.h" интервал основной() { LOG_INFO("тест %s", "я"); } Я получаю неопределенную ссылку на «RS_LOG_INFO_PRIVATE».
nm -C также подтверждает это:
U RS_LOG_INFO_PRIVATE(char const*, ...) Есть ли решение этой проблемы или мне следует изменить свой подход?
Мобильная версия