我在这里跟随LibTorch的教程。
进行了以下更改:
example-app
=〉Ceres
example-app.cpp
=〉main.cxx
一切正常,直到CMake命令cmake --build . --config Release
。
它产生了以下错误:
main.obj : error LNK2001: unresolved external symbol __imp___tls_index_?init@?1??lazy_init_num_threads@internal@at@@YAXXZ@4_NA [D:\Silverous Black\CPE42S2-CPE42S2\CPE 406\ProjectDumagan\src\Ceres\build\Ceres.vcxproj]
main.obj : error LNK2001: unresolved external symbol __imp___tls_offset_?init@?1??lazy_init_num_threads@internal@at@@YAXXZ@4_NA [D:\Silverous Black\CPE42S2-CPE42S2\CPE 406\ProjectDumagan\src\Ceres\build\Ceres.vcxproj]
D:\Silverous Black\CPE42S2-CPE42S2\CPE 406\ProjectDumagan\src\Ceres\build\Release\Ceres.exe : fatal error LNK1120: 2 unresolved externals [D:\Silverous Black\CPE42S2-CPE42S2\CPE 406\ProjectDumagan\src\Ceres\build\Ceres.vcxproj]
我不相信这些是从我放置的变化,因为问题是与链接。
我也试图将此直接复制到Visual Studio中。我使用的是Visual Studio 17 2022,LibTorch extension还不兼容(Visual Studio 16 2019不再可从website安装)。
复制是通过一个空白的C++模板(没有启动文件)。我已经设置了以下宏:
LibTorchTarget
=CPU
* 指定要使用的CPU的libtorch(对其他宏有用 *LibTorchDir
=C:/libtorch/
* 可以找到libtorch安装的目录(适用于多个安装)*- 表示为
C:/libtorch/libtorch_CPU/
- 表示为
C:/libtorch/libtorch_CPU/include/
- 表示为
C:/libtorch/libtorch_CPU/lib/
并且已经将 Include
和 Lib
宏放在了它们各自的VC++ Directories
位置上。以及Linker
〉Input
〉Additional Dependencies
中的$(LibTorchLib)*.lib
(C:/libtorch/libtorch_CPU/lib/*.lib
),以指定所有用于链接的.lib
(防止了大量的LNK2009
错误)。
最后,我在Build Events
〉Pre-Link Event
〉Command Line
处放置了start xcopy /s "$(LibTorchLib)*.dll" "$(OutDir)" /Y /E /D /R
命令,以复制教程中CMakeLists.txt
中的 if
子句(显然是为了避免内存错误)。
结果与最终LNK1120
错误完全相同:
Error LNK2001 unresolved external symbol __imp___tls_index_?init@?1??lazy_init_num_threads@internal@at@@YAXXZ@4_NA Ceres D:\Silverous Black\CPE42S2-CPE42S2\CPE 406\ProjectDumagan\src\Ceres\main.obj 1
Error LNK2001 unresolved external symbol __imp___tls_offset_?init@?1??lazy_init_num_threads@internal@at@@YAXXZ@4_NA Ceres D:\Silverous Black\CPE42S2-CPE42S2\CPE 406\ProjectDumagan\src\Ceres\main.obj 1
Error LNK1120 2 unresolved externals Ceres D:\Silverous Black\CPE42S2-CPE42S2\CPE 406\ProjectDumagan\out\Debug_64\Ceres\Ceres.exe 1
我不太明白LNK
错误的原因,所以如果有人能帮助我,那就太好了。提前谢谢你。
1条答案
按热度按时间neekobn81#
查看:Updating to Visual Studio 17.4.0 Yields linker errors related to TLS
您很可能需要在MSVC更新后重新构建PyTorch。