Я использовал vcpkg для установки RapidJSON и Curl, но мне сложно связать библиотеку ODB для PostgreSQL с моим проектом
Я собрал необходимые библиотеки, используя инструкции по этой ссылке
Я использую vscode с набором инструментов VS2022. У меня есть odb-pgsql-d-2.4-vc12.dll и odb-d-2.4-vc12.dll в PATH и каталоге проекта.
Мне удалось сгенерировать xxx-odb. hpp, используя компилятор ODB, но я не могу правильно связать библиотеку?
Прикрепление минимального CMakeLists.txt, main.cpp и выходного файла сборки.
Я не могу решить проблему ошибки внешних символов.
CMakeLists.txt
project(main VERSION 0.1.0 LANGUAGES C CXX)
set(CMAKE_GENERATOR_PLATFORM x64)
add_executable(main main.cpp)
set(VCPKG_INSTALLED_DIR "C:\\vcpkg\\installed\\x64-windows")
set(ODB_COMPILER_PATH "C:\\pathtools\\bin")
set(ODB_INSTALLED_DIR "C:\\external")
find_package(PostgreSQL REQUIRED)
target_link_libraries(main PRIVATE PostgreSQL::PostgreSQL)
find_program(ODB_COMPILER NAMES odb PATHS "${ODB_COMPILER_PATH}" EXTERNAL REQUIRED)
set(ODB_LIB_DIR "${ODB_INSTALLED_DIR}/lib")
set(ODB_INCLUDE_DIR "${ODB_INSTALLED_DIR}/include")
target_include_directories(main PRIVATE ${ODB_INCLUDE_DIR})
link_directories(${ODB_LIB_DIR})
target_link_libraries(main PRIVATE ${ODB_LIB_DIR}/odb-d.lib)
target_link_libraries(main PRIVATE ${ODB_LIB_DIR}/odb-pgsql-d.lib)
add_custom_target(run
COMMAND ${PROJECT_NAME}
DEPENDS ${PROJECT_NAME}
WORKING_DIRECTORY ${CMAKE_PROJECT_DIR}
)
main.cpp
#include
#include
#include
#include
int main()
{
std::shared_ptr db(new odb::pgsql::database("postgres", "password", "maindb", "localhost", 5432));
return 0;
}
Журналы сборки
[main] Building folder: c:/main/build main
[build] Starting build
[proc] Executing command: "C:\Program Files\CMake\bin\cmake.EXE" --build c:/main/build --config Debug --target main -j 22 --
[build] MSBuild version 17.11.9+a69bbaaf5 for .NET Framework
[build]
[build] main.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) public: __thiscall odb::pgsql::database::database(class std::basic_string const &,class std::basic_string const &,class std::basic_string const &,class std::basic_string const &,unsigned int,class std::basic_string const &,class odb::details::transfer_ptr)" (__imp_??0database@pgsql@odb@@QAE@ABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@000I0V?$transfer_ptr@Vconnection_factory@pgsql@odb@@@details@2@@Z) referenced in function _main [C:\main\build\main.vcxproj]
[build] main.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) public: virtual __thiscall odb::pgsql::database::~database(void)" (__imp_??1database@pgsql@odb@@UAE@XZ) referenced in function "public: virtual void * __thiscall odb::pgsql::database::`scalar deleting destructor'(unsigned int)" (??_Gdatabase@pgsql@odb@@UAEPAXI@Z) [C:\main\build\main.vcxproj]
[build] main.obj : error LNK2001: unresolved external symbol "public: virtual class odb::pgsql::transaction_impl * __thiscall odb::pgsql::database::begin(void)" (?begin@database@pgsql@odb@@UAEPAVtransaction_impl@23@XZ) [C:\main\build\main.vcxproj]
[build] main.obj : error LNK2001: unresolved external symbol "protected: virtual struct odb::database::schema_version_info const & __thiscall odb::pgsql::database::load_schema_version(class std::basic_string const &)const " (?load_schema_version@database@pgsql@odb@@MBEABUschema_version_info@13@ABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@Z) [C:\main\build\main.vcxproj]
[build] main.obj : error LNK2001: unresolved external symbol "protected: virtual class odb::connection * __thiscall odb::pgsql::database::connection_(void)" (?connection_@database@pgsql@odb@@MAEPAVconnection@3@XZ) [C:\main\build\main.vcxproj]
[build] C:\Program Files\PostgreSQL\16\lib\libpq.lib : warning LNK4272: library machine type 'x64' conflicts with target machine type 'x86' [C:\main\build\main.vcxproj]
[build] C:\external\lib\odb-d.lib : warning LNK4272: library machine type 'x64' conflicts with target machine type 'x86' [C:\main\build\main.vcxproj]
[build] C:\external\lib\odb-pgsql-d.lib : warning LNK4272: library machine type 'x64' conflicts with target machine type 'x86' [C:\main\build\main.vcxproj]
[build] C:\main\build\Debug\main.exe : fatal error LNK1120: 5 unresolved externals [C:\main\build\main.vcxproj]
[proc] The command: "C:\Program Files\CMake\bin\cmake.EXE" --build c:/main/build --config Debug --target main -j 22 -- exited with code: 1
[driver] Build completed: 00:00:01.946
[build] Build finished with exit code 1
Подробнее здесь: https://stackoverflow.com/questions/791 ... in-windows
Как правильно связать библиотеку ODB с проектом с помощью cmake в Windows? ⇐ C++
Программы на C++. Форум разработчиков
1730608978
Anonymous
Я использовал vcpkg для установки RapidJSON и Curl, но мне сложно связать библиотеку ODB для PostgreSQL с моим проектом
Я собрал необходимые библиотеки, используя инструкции по этой ссылке
Я использую vscode с набором инструментов VS2022. У меня есть odb-pgsql-d-2.4-vc12.dll и odb-d-2.4-vc12.dll в PATH и каталоге проекта.
Мне удалось сгенерировать xxx-odb. hpp, используя компилятор ODB, но я не могу правильно связать библиотеку?
Прикрепление минимального CMakeLists.txt, main.cpp и выходного файла сборки.
Я не могу решить проблему ошибки внешних символов.
CMakeLists.txt
project(main VERSION 0.1.0 LANGUAGES C CXX)
set(CMAKE_GENERATOR_PLATFORM x64)
add_executable(main main.cpp)
set(VCPKG_INSTALLED_DIR "C:\\vcpkg\\installed\\x64-windows")
set(ODB_COMPILER_PATH "C:\\pathtools\\bin")
set(ODB_INSTALLED_DIR "C:\\external")
find_package(PostgreSQL REQUIRED)
target_link_libraries(main PRIVATE PostgreSQL::PostgreSQL)
find_program(ODB_COMPILER NAMES odb PATHS "${ODB_COMPILER_PATH}" EXTERNAL REQUIRED)
set(ODB_LIB_DIR "${ODB_INSTALLED_DIR}/lib")
set(ODB_INCLUDE_DIR "${ODB_INSTALLED_DIR}/include")
target_include_directories(main PRIVATE ${ODB_INCLUDE_DIR})
link_directories(${ODB_LIB_DIR})
target_link_libraries(main PRIVATE ${ODB_LIB_DIR}/odb-d.lib)
target_link_libraries(main PRIVATE ${ODB_LIB_DIR}/odb-pgsql-d.lib)
add_custom_target(run
COMMAND ${PROJECT_NAME}
DEPENDS ${PROJECT_NAME}
WORKING_DIRECTORY ${CMAKE_PROJECT_DIR}
)
main.cpp
#include
#include
#include
#include
int main()
{
std::shared_ptr db(new odb::pgsql::database("postgres", "password", "maindb", "localhost", 5432));
return 0;
}
Журналы сборки
[main] Building folder: c:/main/build main
[build] Starting build
[proc] Executing command: "C:\Program Files\CMake\bin\cmake.EXE" --build c:/main/build --config Debug --target main -j 22 --
[build] MSBuild version 17.11.9+a69bbaaf5 for .NET Framework
[build]
[build] main.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) public: __thiscall odb::pgsql::database::database(class std::basic_string const &,class std::basic_string const &,class std::basic_string const &,class std::basic_string const &,unsigned int,class std::basic_string const &,class odb::details::transfer_ptr)" (__imp_??0database@pgsql@odb@@QAE@ABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@000I0V?$transfer_ptr@Vconnection_factory@pgsql@odb@@@details@2@@Z) referenced in function _main [C:\main\build\main.vcxproj]
[build] main.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) public: virtual __thiscall odb::pgsql::database::~database(void)" (__imp_??1database@pgsql@odb@@UAE@XZ) referenced in function "public: virtual void * __thiscall odb::pgsql::database::`scalar deleting destructor'(unsigned int)" (??_Gdatabase@pgsql@odb@@UAEPAXI@Z) [C:\main\build\main.vcxproj]
[build] main.obj : error LNK2001: unresolved external symbol "public: virtual class odb::pgsql::transaction_impl * __thiscall odb::pgsql::database::begin(void)" (?begin@database@pgsql@odb@@UAEPAVtransaction_impl@23@XZ) [C:\main\build\main.vcxproj]
[build] main.obj : error LNK2001: unresolved external symbol "protected: virtual struct odb::database::schema_version_info const & __thiscall odb::pgsql::database::load_schema_version(class std::basic_string const &)const " (?load_schema_version@database@pgsql@odb@@MBEABUschema_version_info@13@ABV?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@Z) [C:\main\build\main.vcxproj]
[build] main.obj : error LNK2001: unresolved external symbol "protected: virtual class odb::connection * __thiscall odb::pgsql::database::connection_(void)" (?connection_@database@pgsql@odb@@MAEPAVconnection@3@XZ) [C:\main\build\main.vcxproj]
[build] C:\Program Files\PostgreSQL\16\lib\libpq.lib : warning LNK4272: library machine type 'x64' conflicts with target machine type 'x86' [C:\main\build\main.vcxproj]
[build] C:\external\lib\odb-d.lib : warning LNK4272: library machine type 'x64' conflicts with target machine type 'x86' [C:\main\build\main.vcxproj]
[build] C:\external\lib\odb-pgsql-d.lib : warning LNK4272: library machine type 'x64' conflicts with target machine type 'x86' [C:\main\build\main.vcxproj]
[build] C:\main\build\Debug\main.exe : fatal error LNK1120: 5 unresolved externals [C:\main\build\main.vcxproj]
[proc] The command: "C:\Program Files\CMake\bin\cmake.EXE" --build c:/main/build --config Debug --target main -j 22 -- exited with code: 1
[driver] Build completed: 00:00:01.946
[build] Build finished with exit code 1
Подробнее здесь: [url]https://stackoverflow.com/questions/79152064/how-to-link-odb-library-to-project-correctly-using-cmake-in-windows[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия