cmake 创建解决方案时未链接 64 位可执行文件
Posted
技术标签:
【中文标题】cmake 创建解决方案时未链接 64 位可执行文件【英文标题】:64 bit executables not linked when the solution is created by cmake 【发布时间】:2012-07-10 17:39:59 【问题描述】:我正在使用 cmake 将项目从 linux 移植到 windows。该项目是 clapack 以及一些测试程序。当我构建 32 位版本时,一切正常。但是,当我使用 64 位编译器构建时,无法运行可执行文件。
我运行的命令是:
32 位:
cmake . devenv CLAPACK.sln /build
64 位:
cmake "-DARCH=x86-64_Windows-7_VC10" -G "Visual Studio 10 Win64" devenv CLAPACK.sln /Rebuild "Release|x64" /project ALL_BUILD
我正在运行 Windows 7 和 cmake 2.8.4
【问题讨论】:
等等,你是没有得到可执行文件,还是得到了可执行文件但运行时失败了?有什么错误? 您是否尝试过在 Visual Studio 中打开生成的解决方案文件,并在那里构建和运行?您可能会获得有关失败的更多信息。 (在调试器内部运行,即使是 Release 版本,调试器仍会跟踪 DLL 加载尝试并找出故障发生的位置) 可以为优化(发布)构建生成符号,但即使没有符号,DLL 加载问题也应该很明显。您可以将输出(调试器)窗口中的消息粘贴到您的问题中吗? 我下班后去下载看看能不能搞清楚问题。 什么版本的 Visual Studio,顺便说一句?哪个项目创建了您无法运行的可执行文件? 【参考方案1】:好吧,我不知道如何运行测试,但程序在我的机器上启动得很好(我在问题中使用了第二个 cmake
命令,然后在 Visual Studio 2010 中打开生成的解决方案文件并构建整个解决方案)。安装程序完成后,我将使用 2010 SP1 重试。
这是我在 VS2010 SP1 中构建 RUN_TESTS
的输出。 xeigtsts
通过没问题,但是xeigtstz
反复失败。
1> Test project C:/Users/BEN/Downloads/clapack-3.2.1-CMAKE/clapack-3.2.1-CMAKE
1> Start 1: xblat1s
1> 1/94 Test #1: xblat1s .......................... Passed 0.15 sec
1> Start 2: xblat1c
1> 2/94 Test #2: xblat1c .......................... Passed 0.03 sec
1> Start 3: xblat1d
1> 3/94 Test #3: xblat1d .......................... Passed 0.02 sec
1> Start 4: xblat1z
1> 4/94 Test #4: xblat1z .......................... Passed 0.02 sec
1> Start 5: xblat2s
1> 5/94 Test #5: xblat2s .......................... Passed 0.06 sec
1> Start 6: xblat2c
1> 6/94 Test #6: xblat2c .......................... Passed 0.07 sec
1> Start 7: xblat2d
1> 7/94 Test #7: xblat2d .......................... Passed 0.07 sec
1> Start 8: xblat2z
1> 8/94 Test #8: xblat2z .......................... Passed 0.10 sec
1> Start 9: xblat3s
1> 9/94 Test #9: xblat3s .......................... Passed 0.07 sec
1> Start 10: xblat3c
1> 10/94 Test #10: xblat3c .......................... Passed 0.12 sec
1> Start 11: xblat3d
1> 11/94 Test #11: xblat3d .......................... Passed 0.05 sec
1> Start 12: xblat3z
1> 12/94 Test #12: xblat3z .......................... Passed 0.07 sec
1> Start 13: xlintsts_stest_in
1> 13/94 Test #13: xlintsts_stest_in ................ Passed 2.43 sec
1> Start 14: xlintstc_ctest_in
1> 14/94 Test #14: xlintstc_ctest_in ................ Passed 7.79 sec
1> Start 15: xlintstd_dtest_in
1> 15/94 Test #15: xlintstd_dtest_in ................ Passed 2.24 sec
1> Start 16: xlintstz_ztest_in
1> 16/94 Test #16: xlintstz_ztest_in ................ Passed 7.56 sec
1> Start 17: xlintstds_dstest_in
1> 17/94 Test #17: xlintstds_dstest_in .............. Passed 0.59 sec
1> Start 18: xlintstzc_zctest_in
1> 18/94 Test #18: xlintstzc_zctest_in .............. Passed 1.64 sec
1> Start 19: xlintstrfs_stest_rfp_in
1> 19/94 Test #19: xlintstrfs_stest_rfp_in .......... Passed 0.22 sec
1> Start 20: xlintstrfd_dtest_rfp_in
1> 20/94 Test #20: xlintstrfd_dtest_rfp_in .......... Passed 0.21 sec
1> Start 21: xlintstrfc_ctest_rfp_in
1> 21/94 Test #21: xlintstrfc_ctest_rfp_in .......... Passed 0.83 sec
1> Start 22: xlintstrfz_ztest_rfp_in
1> 22/94 Test #22: xlintstrfz_ztest_rfp_in .......... Passed 0.83 sec
1> Start 23: xeigtsts_nep_in
1> 23/94 Test #23: xeigtsts_nep_in .................. Passed 0.10 sec
1> Start 24: xeigtsts_sep_in
1> 24/94 Test #24: xeigtsts_sep_in .................. Passed 0.40 sec
1> Start 25: xeigtsts_svd_in
1> 25/94 Test #25: xeigtsts_svd_in .................. Passed 2.57 sec
1> Start 26: xeigtsts_sec_in
1> 26/94 Test #26: xeigtsts_sec_in .................. Passed 0.27 sec
1> Start 27: xeigtsts_sed_in
1> 27/94 Test #27: xeigtsts_sed_in .................. Passed 0.12 sec
1> Start 28: xeigtsts_sgg_in
1> 28/94 Test #28: xeigtsts_sgg_in .................. Passed 0.09 sec
1> Start 29: xeigtsts_sgd_in
1> 29/94 Test #29: xeigtsts_sgd_in .................. Passed 0.13 sec
1> Start 30: xeigtsts_ssb_in
1> 30/94 Test #30: xeigtsts_ssb_in .................. Passed 0.02 sec
1> Start 31: xeigtsts_ssg_in
1> 31/94 Test #31: xeigtsts_ssg_in .................. Passed 0.39 sec
1> Start 32: xeigtsts_sbal_in
1> 32/94 Test #32: xeigtsts_sbal_in ................. Passed 0.02 sec
1> Start 33: xeigtsts_sbak_in
1> 33/94 Test #33: xeigtsts_sbak_in ................. Passed 0.02 sec
1> Start 34: xeigtsts_sgbal_in
1> 34/94 Test #34: xeigtsts_sgbal_in ................ Passed 0.02 sec
1> Start 35: xeigtsts_sgbak_in
1> 35/94 Test #35: xeigtsts_sgbak_in ................ Passed 0.02 sec
1> Start 36: xeigtsts_sbb_in
1> 36/94 Test #36: xeigtsts_sbb_in .................. Passed 0.03 sec
1> Start 37: xeigtsts_glm_in
1> 37/94 Test #37: xeigtsts_glm_in .................. Passed 0.02 sec
1> Start 38: xeigtsts_gqr_in
1> 38/94 Test #38: xeigtsts_gqr_in .................. Passed 0.03 sec
1> Start 39: xeigtsts_gsv_in
1> 39/94 Test #39: xeigtsts_gsv_in .................. Passed 0.03 sec
1> Start 40: xeigtsts_lse_in
1> 40/94 Test #40: xeigtsts_lse_in .................. Passed 0.02 sec
1> Start 41: xeigtstc_nep_in
1> 41/94 Test #41: xeigtstc_nep_in .................. Passed 0.17 sec
1> Start 42: xeigtstc_sep_in
1> 42/94 Test #42: xeigtstc_sep_in .................. Passed 0.62 sec
1> Start 43: xeigtstc_svd_in
1> 43/94 Test #43: xeigtstc_svd_in .................. Passed 4.62 sec
1> Start 44: xeigtstc_cec_in
1> 44/94 Test #44: xeigtstc_cec_in .................. Passed 0.05 sec
1> Start 45: xeigtstc_ced_in
1> 45/94 Test #45: xeigtstc_ced_in .................. Passed 0.22 sec
1> Start 46: xeigtstc_cgg_in
1> 46/94 Test #46: xeigtstc_cgg_in .................. Passed 0.20 sec
1> Start 47: xeigtstc_cgd_in
1> 47/94 Test #47: xeigtstc_cgd_in .................. Passed 0.19 sec
1> Start 48: xeigtstc_csb_in
1> 48/94 Test #48: xeigtstc_csb_in .................. Passed 0.03 sec
1> Start 49: xeigtstc_csg_in
1> 49/94 Test #49: xeigtstc_csg_in .................. Passed 0.67 sec
1> Start 50: xeigtstc_cbal_in
1> 50/94 Test #50: xeigtstc_cbal_in ................. Passed 0.04 sec
1> Start 51: xeigtstc_cbak_in
1> 51/94 Test #51: xeigtstc_cbak_in ................. Passed 0.03 sec
1> Start 52: xeigtstc_cgbal_in
1> 52/94 Test #52: xeigtstc_cgbal_in ................ Passed 0.02 sec
1> Start 53: xeigtstc_cgbak_in
1> 53/94 Test #53: xeigtstc_cgbak_in ................ Passed 0.02 sec
1> Start 54: xeigtstc_cbb_in
1> 54/94 Test #54: xeigtstc_cbb_in .................. Passed 0.05 sec
1> Start 55: xeigtstc_glm_in
1> 55/94 Test #55: xeigtstc_glm_in .................. Passed 0.03 sec
1> Start 56: xeigtstc_gqr_in
1> 56/94 Test #56: xeigtstc_gqr_in .................. Passed 0.06 sec
1> Start 57: xeigtstc_gsv_in
1> 57/94 Test #57: xeigtstc_gsv_in .................. Passed 0.04 sec
1> Start 58: xeigtstc_lse_in
1> 58/94 Test #58: xeigtstc_lse_in .................. Passed 0.03 sec
1> Start 59: xeigtstd_nep_in
1> 59/94 Test #59: xeigtstd_nep_in .................. Passed 0.09 sec
1> Start 60: xeigtstd_sep_in
1> 60/94 Test #60: xeigtstd_sep_in .................. Passed 0.50 sec
1> Start 61: xeigtstd_svd_in
1> 61/94 Test #61: xeigtstd_svd_in .................. Passed 3.00 sec
1> Start 62: xeigtstd_dec_in
1> 62/94 Test #62: xeigtstd_dec_in .................. Passed 0.20 sec
1> Start 63: xeigtstd_ded_in
1> 63/94 Test #63: xeigtstd_ded_in .................. Passed 0.13 sec
1> Start 64: xeigtstd_dgg_in
1> 64/94 Test #64: xeigtstd_dgg_in .................. Passed 0.10 sec
1> Start 65: xeigtstd_dgd_in
1> 65/94 Test #65: xeigtstd_dgd_in .................. Passed 0.14 sec
1> Start 66: xeigtstd_dsb_in
1> 66/94 Test #66: xeigtstd_dsb_in .................. Passed 0.02 sec
1> Start 67: xeigtstd_dsg_in
1> 67/94 Test #67: xeigtstd_dsg_in .................. Passed 0.50 sec
1> Start 68: xeigtstd_dbal_in
1> 68/94 Test #68: xeigtstd_dbal_in ................. Passed 0.02 sec
1> Start 69: xeigtstd_dbak_in
1> 69/94 Test #69: xeigtstd_dbak_in ................. Passed 0.02 sec
1> Start 70: xeigtstd_dgbal_in
1> 70/94 Test #70: xeigtstd_dgbal_in ................ Passed 0.02 sec
1> Start 71: xeigtstd_dgbak_in
1> 71/94 Test #71: xeigtstd_dgbak_in ................ Passed 0.02 sec
1> Start 72: xeigtstd_dbb_in
1> 72/94 Test #72: xeigtstd_dbb_in .................. Passed 0.03 sec
1> Start 73: xeigtstd_glm_in
1> 73/94 Test #73: xeigtstd_glm_in .................. Passed 0.03 sec
1> Start 74: xeigtstd_gqr_in
1> 74/94 Test #74: xeigtstd_gqr_in .................. Passed 0.03 sec
1> Start 75: xeigtstd_gsv_in
1> 75/94 Test #75: xeigtstd_gsv_in .................. Passed 0.03 sec
1> Start 76: xeigtstd_lse_in
1> 76/94 Test #76: xeigtstd_lse_in .................. Passed 0.02 sec
1> Start 77: xeigtstz_nep_in
1> 77/94 Test #77: xeigtstz_nep_in ..................***Failed 42.68 sec
1> Start 78: xeigtstz_sep_in
1> 78/94 Test #78: xeigtstz_sep_in ..................***Failed 9.85 sec
1> Start 79: xeigtstz_svd_in
1> 79/94 Test #79: xeigtstz_svd_in ..................***Failed 7.24 sec
1> Start 80: xeigtstz_zec_in
1> 80/94 Test #80: xeigtstz_zec_in ..................***Failed 9.30 sec
1> Start 81: xeigtstz_zed_in
1> 81/94 Test #81: xeigtstz_zed_in ..................***Failed 6.65 sec
1> Start 82: xeigtstz_zgg_in
1> 82/94 Test #82: xeigtstz_zgg_in ..................***Failed 7.73 sec
1> Start 83: xeigtstz_zgd_in
1> 83/94 Test #83: xeigtstz_zgd_in ..................***Failed 7.55 sec
1> Start 84: xeigtstz_zsb_in
1> 84/94 Test #84: xeigtstz_zsb_in ..................***Failed 6.85 sec
1> Start 85: xeigtstz_zsg_in
1> 85/94 Test #85: xeigtstz_zsg_in ..................***Failed 7.41 sec
1> Start 86: xeigtstz_zbal_in
1> 86/94 Test #86: xeigtstz_zbal_in .................***Failed 7.36 sec
1> Start 87: xeigtstz_zbak_in
1> 87/94 Test #87: xeigtstz_zbak_in .................***Failed 6.84 sec
1> Start 88: xeigtstz_zgbal_in
1> 88/94 Test #88: xeigtstz_zgbal_in ................***Failed 7.31 sec
1> Start 89: xeigtstz_zgbak_in
1> 89/94 Test #89: xeigtstz_zgbak_in ................***Failed 6.79 sec
1> Start 90: xeigtstz_zbb_in
1> 90/94 Test #90: xeigtstz_zbb_in ..................***Failed 6.81 sec
1> Start 91: xeigtstz_glm_in
1> 91/94 Test #91: xeigtstz_glm_in ..................***Failed 7.59 sec
1> Start 92: xeigtstz_gqr_in
1> 92/94 Test #92: xeigtstz_gqr_in ..................***Failed 7.38 sec
1> Start 93: xeigtstz_gsv_in
1> 93/94 Test #93: xeigtstz_gsv_in ..................***Failed 7.14 sec
1> Start 94: xeigtstz_lse_in
1> 94/94 Test #94: xeigtstz_lse_in ..................***Failed 7.64 sec
1>
1> 81% tests passed, 18 tests failed out of 94
1>
1> Total Test time (real) = 211.82 sec
1>
1> The following tests FAILED:
1> 77 - xeigtstz_nep_in (Failed)
1> 78 - xeigtstz_sep_in (Failed)
1> 79 - xeigtstz_svd_in (Failed)
1> 80 - xeigtstz_zec_in (Failed)
1> 81 - xeigtstz_zed_in (Failed)
1> 82 - xeigtstz_zgg_in (Failed)
1> 83 - xeigtstz_zgd_in (Failed)
1> 84 - xeigtstz_zsb_in (Failed)
1> 85 - xeigtstz_zsg_in (Failed)
1> 86 - xeigtstz_zbal_in (Failed)
1> 87 - xeigtstz_zbak_in (Failed)
1> 88 - xeigtstz_zgbal_in (Failed)
1> 89 - xeigtstz_zgbak_in (Failed)
1> 90 - xeigtstz_zbb_in (Failed)
1> 91 - xeigtstz_glm_in (Failed)
1> 92 - xeigtstz_gqr_in (Failed)
1> 93 - xeigtstz_gsv_in (Failed)
1> 94 - xeigtstz_lse_in (Failed)
1> Errors while running CTest
重建该项目并不能解决问题。 dumpbin 说 PE 头是有效的。
当我在调试器中运行时,我肯定会得到大量的调试输出。堆栈溢出。我必须启用符号才能准确查看发生了什么。但首先,让我们看看 Debug 构建是否以同样的方式失败。
是的,确实如此。测试用例被严重破坏,它试图使用数兆字节的自动变量,这些变量不适合堆栈。这是罪魁祸首:
doublecomplex a[243936] /* was [17424][14] */, b[87120] /* was [17424]
[5] */, c__[160000] /* was [400][400] */;
项目已经调整为使用 10MB 的堆栈,而不是默认的 1MB。在 x64 构建中,这仍然不够。将链接器选项更改为/STACK:40000000
后,崩溃就消失了。 (这不是一个好的解决方案,最初扩展到 10MB 也不是一个好主意。不要使用大小可笑的自动变量,我们有动态和静态的生命周期。)
更改该测试的链接器选项后:
1> 100% tests passed, 0 tests failed out of 94
1>
1> Total Test time (real) = 48.98 sec
【讨论】:
您是否正在运行 clapack 测试程序(例如 TESTING\EIG\Release 中的 xeigtsts)? 您还可以通过构建 RUN_TESTS 来使用正确的测试输入运行测试套件。当我这样做时,前 9 个(blas 测试)通过,其余的则失败,因为它们无法运行。但这条路线的信息量更少,因为它只说测试失败,而不是因为可执行文件无法运行。 @Scottfivefour:很可能是我正在运行的 blas 测试。今晚我会检查其他的。以上是关于cmake 创建解决方案时未链接 64 位可执行文件的主要内容,如果未能解决你的问题,请参考以下文章
PCL 和 CMake 的问题:链接时未定义 StatisticalOutlierRemoval