Я пишу файлы lib в VS, которые необходимо импортировать в CVI. В последнее время возникла проблема с компоновщиком.MS C/C++ Linkeroption/MT, но все еще неразрешенный _allmul() при соединении с разными IDE
В нем говорится, что _allmul() является неопределенным символом.
_allmul() и freinds реализованы как вызовы функций библиотеки CRT для обработки различных 64-битных операций.
Файл lib, который я пишу, является статическим, потому что я хочу, чтобы весь код жил внутри него. Ссылка на VS не является проблемой, и все unittests проходят.
Ссылка на CVI-IDE оставляет CVI Linkter, жалующегося на неразрешенный _allmul().
Я уверен, что установка переключателя/MT в VS достаточна для того, чтобы сделать ссылку на CRT статически, это кажется неправильным.
Почему мое предположение неверно? Как я могу связать звонки CRT статически?
Edit:
Вот краткий демо-проекта, который я могу компилировать в VS2010, но что я не могу связать в ХВН скомпилирован как проект LIB следующее:
HEADER
void print(unsigned A, unsigned B);
КОД
#include "MyprintInterface.h"
#include <stdio.h>
void print(unsigned A, unsigned B){
long long copyA = (long long) A;
long long copyB = (long long) B;
printf_s(" %lli * %lli = %lli ", copyA, copyB, copyA * copyB);
// copyA * copyB -> this invokes allmul
// printf_s this is a ms specific function
}
Используйте форумы поддержки поставщика, чтобы найти справку. –
Там нет действительно много материала о CRT, поэтому я надеюсь получить общее решение здесь. Я уже решил конкретную проблему просто путем реализации моей собственной 64-битной функции умножения - я не очень заинтересован в CVI, но внутренние механизмы компоновки CRT меня очень интересуют. – Johannes
Теперь я испытываю похожие проблемы с символом _snprintf_s. Я предполагаю, что две проблемы имеют общий источник. – Johannes