在使用 Visual Studio 2013 64 位编译器编译的 CMake 项目中使用 ttmath
Using ttmath in CMake project compiled with the Visual Studio 2013 64-bit compiler
包含 header
时
#include "ttmath/ttmath.h"
如 ttmath's web page 中所述(其中库包含在项目文件夹内的文件夹 ttmath
中),我得到了一些编译器错误,如下所示:
main.cpp.obj:-1: error: LNK2019: unresolved external symbol ttmath_adc_x64 referenced in function "public: unsigned __int64 __cdecl ttmath::UInt<28>::Add(class ttmath::UInt<28> const &,unsigned __int64)" (?Add@?$UInt@[=12=]BM@@ttmath@@QEAA_KAEBV12@_K@Z)
我正在使用 QT Creator 3.3.1,它生成了 CMakeLists.txt
文件
project(my_project)
cmake_minimum_required(VERSION 2.8)
aux_source_directory(. SRC_LIST)
add_executable(${PROJECT_NAME} ${SRC_LIST})
如here所述,问题是Visual Studio 64 位不支持汇编代码文件ttmathuint_x86_64_msvc.asm
的内联。因此选项是
通过添加
禁用程序集
#define TTMATH_NOASM 1
在包括 ttmath.h
之前。这将花费大约两倍的性能。
Assemble 并手动包含文件:
运行 命令 "C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin\x86_amd64\ml64.exe" /c ttmathuint_x86_64_msvc.asm
(在 ttmath
文件夹内)。
通过将 CMakeLists.txt
中的最后一行替换为
在编译中包含目标文件
add_executable(${PROJECT_NAME} ${SRC_LIST} ttmath/ttmathuint_x86_64_msvc.obj)
包含 header
时#include "ttmath/ttmath.h"
如 ttmath's web page 中所述(其中库包含在项目文件夹内的文件夹 ttmath
中),我得到了一些编译器错误,如下所示:
main.cpp.obj:-1: error: LNK2019: unresolved external symbol ttmath_adc_x64 referenced in function "public: unsigned __int64 __cdecl ttmath::UInt<28>::Add(class ttmath::UInt<28> const &,unsigned __int64)" (?Add@?$UInt@[=12=]BM@@ttmath@@QEAA_KAEBV12@_K@Z)
我正在使用 QT Creator 3.3.1,它生成了 CMakeLists.txt
文件
project(my_project)
cmake_minimum_required(VERSION 2.8)
aux_source_directory(. SRC_LIST)
add_executable(${PROJECT_NAME} ${SRC_LIST})
如here所述,问题是Visual Studio 64 位不支持汇编代码文件ttmathuint_x86_64_msvc.asm
的内联。因此选项是
通过添加
禁用程序集#define TTMATH_NOASM 1
在包括
ttmath.h
之前。这将花费大约两倍的性能。Assemble 并手动包含文件:
运行 命令
"C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin\x86_amd64\ml64.exe" /c ttmathuint_x86_64_msvc.asm
(在ttmath
文件夹内)。通过将
在编译中包含目标文件CMakeLists.txt
中的最后一行替换为add_executable(${PROJECT_NAME} ${SRC_LIST} ttmath/ttmathuint_x86_64_msvc.obj)