0

Мне нужно связать статическую библиотеку с данным объектным файлом. У меня нет исходного кода этого файла и никакого влияния на него.Ошибка ссылки Visual Studio 2015 LNK2005

При использовании Visual Studio 2010 я могу создать библиотеку и связать ее с данным файлом.

На другой машине я только VS 2015 Когда я строить и связать свой C-код для данной Lib я получаю следующее сообщение об ошибке:

LIBCMT.lib(vfprintf.obj) : error LNK2005: __vfprintf_l already defined in c_fun.obj 
LIBCMT.lib(printf.obj) : error LNK2005: _printf already defined in c_fun.obj 

Для целей тестирования я использую следующий упрощенный код:

#include <stdio.h> 

void c_fun(double C_IN, double *C_OUT) 
{ 
    *C_OUT = C_IN * 2.0; 

    printf("Hallo C!\n"); 
} 

Когда я воздаю PRINTF линию, то я могу успешно связать LIB созданный с VS2015, но мне нужно PRINTF заявление для визуализации целей.

Чтобы скомпилировать мою библиотеку, я использую те же параметры в командной строке. Есть ли опция компилятора или компоновщика для создания совместимой с VS 2010 библиотеки?

Когда я использую DUMPBIN/все для обоих LIBS, я получаю следующие результаты:

Lib, созданные с помощью VS2010:

2 public symbols 

     BC _F_FUN 
     310 _c_fun 

Lib, созданный с VS2015: 7 публичных символов

 1DE _F_FUN 
     432 [email protected][email protected]@[email protected] 
     432 ___local_stdio_printf_options 
     432 [email protected] 
     432 __vfprintf_l 
     432 _c_fun 
     432 _printf 

Я бы ожидал получить одинаковые символы с обеими версиями.

опции компилятора я использую оба раза «/ MT/W3/EHsc/с»

ответ

2

Visual Studio 2015 компиляторы не совместимы с объектных файлов, созданных в более ранних версиях компилятора. Произошла серьезная реорганизация библиотеки времени выполнения C, которая нарушила обратную совместимость уровня объекта на уровне C, который раньше имел Visual Studio. Вам нужно будет использовать старый компилятор для компиляции и создания статической библиотеки, а затем связать его с объектным файлом, созданным старым компилятором. Вы можете сделать это в Visual Studio 2015, установив Visual Studio 2010 и в свойствах проекта Visual Studio 2015, выбрав «Visual Studio 2010 (v100)» в разделе «Свойства конфигурации» -> «Общие» -> «Набор инструментов платформы».