小编And*_*lus的帖子

使用CMake在NVCC中触发C++ 11支持

我用CUDA 7.5运行Ubuntu 15.10.CMmake是v3.2.2,NVCC是7.5版本,v7.5.17; GCC是Ubuntu 5.2.1-22ubuntu2 v5.2.1

在常规项目中触发C++ 11很容易:

project(foo CXX)
set(TARGET foo CMAKE_CXX_STANDARD 11)
Run Code Online (Sandbox Code Playgroud)

我正在定义我的CUDA项目:

find_package(CUDA REQUIRED)
CUDA_ADD_EXECUTABLE(foo ${foo_src} ${foo_hdr} ${foo_cu})
Run Code Online (Sandbox Code Playgroud)

但C++ 11支持不会传播到NVCC.我要补充一下:

list(APPEND CUDA_NVCC_FLAGS "-std=c++11")
Run Code Online (Sandbox Code Playgroud)

这看起来像一个kludge.根据这项任务,最近有明显的工作,但我无法找到结果.

在将项目声明为C++ 11时,如何让CMake自动设置C++ 11标志?

编辑:我已经使用CUDA 8.0和CMake 3.5.1重新回答了这个问题.

文档中, set(CUDA_PROPAGATE_HOST_FLAGS ON)将传播内容CMAKE_CXX_FLAGS,因此以下触发cpp和nvcc的C++ 11:

set (CMAKE_CXX_FLAGS "--std=c++11")
set (CUDA_PROPAGATE_HOST_FLAGS ON)
Run Code Online (Sandbox Code Playgroud)

但是,set(CMAKE_CXX_STANDARD 11)不会产生影响CMAKE_CXX_FLAGS,因此以下内容为C++ 11设备代码提供了编译器错误,因为没有任何内容可以传播:

set (CMAKE_CXX_STANDARD 11)
set (CUDA_PROPAGATE_HOST_FLAGS ON)
Run Code Online (Sandbox Code Playgroud)

我似乎找不到可以避免--std=c++11在CXX或CUDA标志中明确设置的CMake命令的组合.

cuda cmake c++11

11
推荐指数
1
解决办法
4359
查看次数

如何在CMake中找到zlib的静态版本?

我使用的是 cmake 版本 3.12.1,想要构建一个使用 ZLIB 的静态可执行文件。我的机器上有静态(libz.a)和共享(libz.so)库。我如何知道find_package(ZLIB)返回静态版本?也许还有另一种方法可以找到libz.a

我目前的解决方法是指定:

SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -static")

然后:

target_link_libraries (my_binary z lib1 lib2)

也欢迎对这种方法提出批评!

zlib cmake

8
推荐指数
2
解决办法
7838
查看次数

将 unique_ptr 引用传递给 boost::bind?

我使用 CentOS 6.6 (gcc 4.4.7) 并使用 Boost.Asio (1.41) 进行开发。我希望 io_servicerun()m启动时调用管理器对象中的成员函数。我试图编译的代码如下所示:

#include <memory>
#include <boost/asio.hpp>
#include <boost/bind.hpp>

boost::asio::io_service io;
std::unique_ptr<manager> m;
m = std::make_unique<manager>;
io.post(boost::bind(&manager::run, &m));
Run Code Online (Sandbox Code Playgroud)

gcc 对boost::bind声明进行了匹配,其中包括:

/usr/include/boost/bind/mem_fn_template.hpp:40: error: pointer to
member type ‘void (manager::)()’ incompatible with object type
‘std::unique_ptr<manager, std::default_delete<manager> >’
Run Code Online (Sandbox Code Playgroud)

我想在这里做什么?

manager 对象只会知道计时器;一个了解 io_service 的单独对象稍后将被添加到其构造函数中。但我们的想法是manager::run()创建一组初始计时器来引导系统。

澄清:

我的想法是,外部代码块管理 的生命周期,m下一条语句将是io.run(). 外部代码将mio.run()返回时销毁。因此,为mto传递原始引用io是合适的。但我是一个现代 C++ 新手,在这里可能会偏离基础。

c++ gcc boost boost-bind boost-asio

6
推荐指数
1
解决办法
2307
查看次数

无法在 Windows 10 ssh 服务器上使用公钥登录

我已经安装了 Windows 10 ssh 软件包并设置了 sshd。使用密码登录效果很好,但我无法使用公钥登录。我在 Linux 机器上有相同的authorized_keys文件.\ssh\authorized_keys,其中公钥登录效果很好。我也跑了:

PS C:\Users\ffoobar> Repair-AuthorizedKeyPermission .\.ssh\authorized_keys
  [*] .\.ssh\authorized_keys

'NT SERVICE\sshd' needs Read access to '.\.ssh\authorized_keys'.
Shall I make the above change?
[Y] Yes  [A] Yes to All  [N] No  [L] No to All  [S] Suspend  [?] Help (default is "Y"): y
'NT SERVICE\sshd' now has Read access to '.\.ssh\authorized_keys'.
      Repaired permissions

PS C:\Users\ffoobar> Repair-AuthorizedKeyPermission .\.ssh\authorized_keys
  [*] .\.ssh\authorized_keys
      looks good

PS C:\Users\ffoobar> 
Run Code Online (Sandbox Code Playgroud)

在 中C:\ProgramData\ssh\sshd_config,我设置PubkeyAuthentication yes.

尝试登录会给出:

ffoobar@snorri …
Run Code Online (Sandbox Code Playgroud)

windows sshd windows-10

5
推荐指数
1
解决办法
8357
查看次数

最好在Ruby中的参数错误中abort()或raise()?

我正在Ruby中编写一个命令行实用程序,并编写检查参数组合是否有效的逻辑.如果我发现错误,如果我不打算恢复,那么引发ArgumentError与现场调用abort()的优势是什么?一般情况下,如果没有计划尝试恢复,何时提出异常而不是中止?我假设异常路由是可取的,需要某种优雅的关闭,而不是简单地回退到命令行.

ruby raise abort

2
推荐指数
1
解决办法
1239
查看次数

标签 统计

cmake ×2

abort ×1

boost ×1

boost-asio ×1

boost-bind ×1

c++ ×1

c++11 ×1

cuda ×1

gcc ×1

raise ×1

ruby ×1

sshd ×1

windows ×1

windows-10 ×1

zlib ×1