Связывание статической библиотеки с общей библиотекой в ​​MSVC приводит к неразрешенному символу - PullRequest
0 голосов
/ 24 октября 2018

Я создаю динамическую библиотеку c, которая связана со статической библиотекой b.

Статическая библиотека b статически связана со статической библиотекой a.

Cmake для c примерно выглядит так (cmakes для a и b очень похожи):

cmake_minimum_required(VERSION 2.6)
project(c)

include_directories(../b/src)
link_directories(../b/Debug)

add_library(c SHARED src/c.cpp)
target_link_libraries(c PRIVATE b)

Проблема, которую я имеюОблицовка связана с тем, что c не может видеть ссылки на функции, определенные в a:

b.lib(b.obj) : error LNK2019: unresolved external symbol "int __cdecl a(void)" (?a@@YAHXZ) referenced in function "int __cdecl b(void)" (?b@@YAHXZ) [C:\Users\user\Workspace\garbage\c\c.vcxproj]
C:\Users\user\Workspace\garbage\c\Debug\c.dll : fatal error LNK1120: 1 unresolved externals [C:\Users\user\Workspace\garbage\c\c.vcxproj]

Есть ли способ для c правильно связать?

Смежные вопросы:

Связывание статических библиотек с другими статическими библиотеками

1 Ответ

0 голосов
/ 24 октября 2018

Что-то говорит мне, что ваш вывод компоновщика не совсем правильный.Похоже, что a и b пытаются экспортировать классы.

Кроме того, эта строка говорит нам, что b на самом деле не может видеть некоторый символ (возможно, конструктор класса по умолчанию) для библиотеки (класса) a:

b.lib(b.obj) : error LNK2019: unresolved external symbol "int __cdecl a(void)" (?a@@YAHXZ) referenced in function "int __cdecl b(void)" (?b@@YAHXZ)

На самом деле, ваш пример CMake никогда не связывает a с b, и ваши первоначальные вопросы говорят, что b связан с a.Если вы имеете в виду то, что сказали в своем вопросе, ваш компоновщик показывает логическую ошибку.

...