2014-02-10 2 views
3

У меня есть статическая библиотека, которая компилируется отлично (позволяет вызвать ее A), и она зависит от другой статической библиотеки (позволяет называть ее B).Неразрешенный внешний символ из статической библиотеки в одном проекте, а не другой. (C++)

У меня также есть проект X, в котором используется библиотека A. Итак, в X я включаю B, а затем под ним включаю A, как в stdafx.h. Я делаю это с помощью комментариев #pragma. Проект X компилируется отлично.

Однако у меня тогда есть проект Y, который также использует библиотеку A. Но, хотя проект stdafx.h проекта Y является ИДЕНТИЧНЫМ для X, Y не компилируется, давая ошибки «неразрешенных внешних символов». Еще более странно то, что ошибки относятся к функции в библиотеке B от функции, указанной в библиотеке A.

Кто-нибудь знает, почему это происходит? Извините, если я не был ясен; есть так много кода, я бы не знал, с чего начать его здесь. Благодаря!

+0

Я в том числе библиотеки, как это: #include ".. \ либа \ libraryA.h" #pragma комментарий (Пб ".. \\ \\ Shared Lib \\ libraryA.lib") – Raiden616

ответ

4

Я собираюсь предположить, что вы используете MSVS на основе заголовка stdafx.h. При включении статических библиотек вам необходимо не только включать необходимые файлы заголовков, но вы должны ссылаться на файл статической библиотеки, то есть на файл .lib. Я предполагаю, что проект X имеет доступ к этому .lib-файлу, а проект Y - нет.

Возможно через свойства-> общие свойства-> Ссылки, а затем «добавить новую ссылку», чтобы указать на обе библиотеки.

Является ли ваш проект Y, а также Project X, A, B в том же решении? Добавление этих проектов к тому же решению, что и Y, может помочь. Я только сделал это, имея решение, содержащее все статические библиотеки, которые я хочу включить. В моем случае пути автоматически (и корректно) устанавливались MSVS. Хотя это, вероятно, требует добавления проектов к решению. (который будет использовать метод, упомянутый выше «properties-> common properties-> References» и т. д.).

Если это файл .lib извне вашего проекта, вы должны включить его в «properties-> Configuration Properties-> Linker-> Input-> Additional dependencies» и убедиться, что его путь находится в «свойствах- > Конфигурация свойства-> Linker-> Общие-> Дополнительные каталоги библиотек»

Надежда, что помогает

+0

Когда Я пытаюсь сделать так, что он все еще терпит неудачу, но я думаю, что это связано с тем, что в свойствах ссылки «полный путь» неверен. Но он неактивен, поэтому я не могу его изменить - как его изменить? – Raiden616

+0

Выяснилось, как изменить полный путь, но мне не повезло. – Raiden616

-1

Сегодня я была проблема неразрешенных символов в Lib и я понятия не имел, почему.

И решение должно было включать все мои файлы * .c и * .h в мой проект. (Недавно я просто скопировал их в папку проекта, но не добавил их в проект) Проект составлен без ошибок до ...

Я не уверен, что это ваша проблема, но поскольку это первое, что я нашел когда я googled, я отправляю его здесь.

+2

Это называется «копирование», а не «решение». Библиотеки создаются именно для ** не ** необходимости включать исходные файлы всего мира в вашу маленькую программу. –