2016-10-19 3 views
0

Я изо всех сил пытаюсь связать статическую библиотеку, созданную с помощью CMake в другом проекте Visual C++. Я получаю неразрешенные символьные ошибки LNK2001 для всех символов в библиотеке. Забыли ссылку с библиотекой? Я действительно не думаю, что у меня есть, поскольку я указал его как абсолютный путь и проверил, что если я изменю имя, я получаю сообщение об ошибке, что он не может найти библиотеку, поэтому он определенно смотрит на нее.LNK2001 с статической библиотекой Cmake

Я использовал DUMPBIN для просмотра имен символов, и они кажутся разными по сравнению с тем, что ищет VC++, например.

(в статической библиотеке)

[email protected]@@[email protected]@Z (public: __thiscall NEWMAT::Matrix::Matrix(int,int)) 

(неразрешенный символ)

public: __cdecl NEWMAT::Matrix::Matrix(int,int)" ([email protected]@@[email protected]@Z) 

примечание QAE против QEAA в декоре, а также библиотека имеет __thiscall тогда компилятор ищет __cdecl

Похоже, что вызывающая конвенция может быть проблемой, но почему она будет отличаться, и есть ли переключатель компилятора, чтобы сделать его последовательным?

Я прошел через свойства проекта и попытался сделать все параметры компилятора одинаковыми, но безрезультатно. К сожалению, я не эксперт VC++, поэтому, возможно, это что-то очень простое, но кто-нибудь может помочь?

+0

Добро пожаловать в переполнение стека. Я бы рассмотрел разницу в файлах заголовков, которые вы развертываете с библиотекой, и файлы заголовков, с которыми вы строите библиотеку. – Florian

ответ

0

Хорошо, я, видимо, исправил это, хотя меня смущает ошибка, которую я получил. Кажется, что библиотека CMake была нацелена на x86, а не на x64. Я обнаружил это, когда пытался перевести ссылку на другую библиотеку в той же группе, которая затем сообщила об ошибке в отношении непоследовательных типов машин. Зафиксировав CMake для сборки x64, я заметил, что соглашение о вызове теперь как ожидалось, и у меня нет неразрешенных символов.

Немного непонятно, почему я не получил ошибку типа машины в первой библиотеке, но это жизнь.