Я пытался устранить серьезную утечку памяти в моем приложении C ++. Я сузил его до создания соединений MySQL, и документ mysqlpp (плюс большое количество поисков в Google) указывает на то, что мне нужно вызвать mysql_library_end (), чтобы сообщить C API о необходимости очистки после себя.
Когда я пытаюсь использовать эту функцию, Visual Studio выдает ошибку ссылки для «mysql_library_end ()». Справедливо, я не сказал, где искать.
Когда я включаю заголовочный файл mysql.h и перестраиваю, Visual Studio выдает ошибку ссылки для «mysql_server_end ()«вместо этого. Я проверил mysql.h (в моей среде сборки), и единственная ссылка на функцию, которую я хочу использовать (mysql_library_end ()):
#define mysql_library_end mysql_server_end
В файле есть объявление функции для mysql_server_end (), но Visual Studio не может его видеть. Я просто застрял с этой ошибкой компоновщика, и я понятия не имею, почему это происходит.
Кто-нибудь может помочь?
Ура,
Адам.
РЕДАКТИРОВАТЬ
Я использую Visual Studio 2005. Сообщение об ошибке из IDE:
Ошибка 6 ошибка LNK2019: неразрешенный внешний символ _mysql_server_end @ 0, на который ссылается функция «public: __thiscall CConnectionParams :: ~ CConnectionParams (void)» (?? 1CConnectionParams @@ QAE @ XZ) CConnectionParams.obj.
Где CConnectionParams — это файл .cpp вызова mysql_library_end ().
Нашел решение. Сам по себе заголовочный файл недостаточен, необходимо связать всю библиотеку. Для взаимодействия с MySQL C API можно использовать две библиотеки: libmysql.lib и mysqlclient.lib. Один статичен, другой динамичен. Тот, который работал для меня, был libmysql.lib. Обратите внимание, что в результате мне не нужно было включать #include mysql.h.
Чтобы связать эту библиотеку в Visual studio, вам просто нужно включить ее как часть зависимостей вашего проекта. Я перетащил его в дерево решений из его каталога, установки mysql, но это не очень элегантный метод, потому что он работает только для VS, а не для других сред сборки.
Других решений пока нет …