Итак, мы недавно обновили наш проект, чтобы использовать Microsoft Visual Studio 2010, и у нас возникли некоторые проблемы с нашими проектами CUDA.
У меня установлен 2008, и я использую инструментарий vc90, и файлы, кажется, компилируются (создаются связанные с ними файлы .obj). Это в проекте, который создает .lib в качестве своего вывода. Затем .lib связывается с другим проектом, который выдает ошибки компоновщика, поскольку один из файлов в библиотеке (Matrix.obj) не может найти один из символов, который должен быть в CUDAMatrix.obj.
Я запустил dumpbin / SYMBOLS на CUDAMatrix.obj, и там есть символ, не UNDEF, а External. Я запустил мусорную корзину на нашем .lib, и символ, кажется, не находится внутри него. Я добавил подробности сборки библиотеки и список файлов .obj после:
c:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\bin\Lib.exe
Не содержит CUDAMatrix.obj.
Подводя итог, как проект Visual Studio узнает, какие файлы .obj нужно вставить в создаваемый .lib? Я нигде не мог найти фактический список, и подменю библиотекаря, похоже, не помогло.
Или, по меньшей мере, удобно, есть ли какой-нибудь внешний инструмент (похожий на 'ar' в linux), который я могу использовать для объединения .obj, созданного им с библиотекой? Я подумал, что, возможно, ключ / MERGE на lib.exe сделает это, но я продолжал получать ошибку .dll не найден, когда пытался запустить ее из командной строки.
P.S. Кроме того, свалки подтвердили, что и .lib, и .objs были нацелены на x86.
P.P.S. Кажется, что добавление их в библиотеку как «дополнительных зависимостей» работает, но разве не существует хорошего способа сделать это автоматически? В конце концов, они являются частью проекта.