小编ein*_*ica的帖子

是否可以使用Cygwin下的gcc/g ++链接Windows .dll + .lib文件组合?

我知道如何在Unix-ish上下文中链接库:如果我正在使用.a.so文件,我指定根搜索目录-L/my/path/to/lib/和我添加的libMylib -lMyLib.

但是,如果我有

  • a .dll(例如在Windows\System32目录中)?
  • a .dll(in Windows\System32)和a .lib(其他地方)?

这些DLL是由其他一方提出的; 我无法访问他们的源 - 但是可以访问相应的包含文件,我可以根据这些文件进行编译.

c dll linker gcc cygwin

6
推荐指数
2
解决办法
7908
查看次数

A min = C++中的习语?

我们用

x += y
Run Code Online (Sandbox Code Playgroud)

代替

x = x + y
Run Code Online (Sandbox Code Playgroud)

*,/,-和其他运营商类似.那么,那怎么样

x min= y
Run Code Online (Sandbox Code Playgroud)

代替

x = std::min(x, y)
Run Code Online (Sandbox Code Playgroud)

?这个命令是否有一个常用的习惯用法,不需要用另一个操作符(不可能)扩展该语言?

c++ operator-overloading idiomatic min c++11

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

动态 - 数学 - 数学

是否可以在运行时选择性地打开/关闭-ffast-math?例如,使用公共基类Math创建类FastMath和AccurateMath,以便一个人能够在运行时使用这两个实现?将次正常闪烁归零等同样如此.

特别是,我不知道使用-ffast-math进行编译是否会发出一条指令,该指令一旦执行就会影响线程中的所有数值计算(例如,设置一个标志以将subnormals刷新为零).

c optimization performance gcc fast-math

6
推荐指数
2
解决办法
979
查看次数

我如何获得'make uninstall'来删除空目录和文件?

当我使用make uninstall它卸载一个应用程序时,会留下一些make install已经创建的空目录,例如/usr/share/foo/和它的子目录/usr/share/foo/applications等等.

我通过Google发现,automake生成的uninstall目标不会自动删除空目录,因为它不知道应用程序是否拥有目录(例如,它是否在其中创建make install),或借用它(例如,存在期间的目录make install).

目前我的make文件都没有确定的uninstall目标,隐式似乎知道它必须删除哪些文件.如何教它还删除有问题的文件夹?

automake uninstall

6
推荐指数
2
解决办法
2240
查看次数

在 CUDA 中交换两个寄存器变量的有效方法是什么?

我开始写一些 CUDA 代码,我想对std::swap()内核中的两个变量做等价的;它们在寄存器文件中(没有溢出,不在某些缓冲区中,等等)。假设我有以下设备代码:

__device__ foo(/* some args here */) {

    /* etc. */

    int x = /* value v1 */;
    int y = /* value v2 */;

    /* etc. */

    swap(x,y);

    /* etc. */
}        
Run Code Online (Sandbox Code Playgroud)

现在,我可以写

template <typename T> void swap ( T& a, T& b )
{
  T c(a); a=b; b=c;
}
Run Code Online (Sandbox Code Playgroud)

但我想知道 - 不是有一些内置的 CUDA 用于此功能吗?

笔记:

  • 是的,我希望它为所有线程运行。
  • 不要在意我是否有足够的寄存器。假设我有它们。

c++ swap cuda

6
推荐指数
2
解决办法
4578
查看次数

为什么我对CUDA数学库sqrt()函数的调用失败了?

我是Cuda的新手,我有以下功能:

__global__ void square(float *myArrayGPU)
{
   myArrayGPU[threadIdx.x] = sqrt(threadIdx.x);
}
Run Code Online (Sandbox Code Playgroud)

我想使用cuda数学库,我试过,#include "math.h"但我仍然得到错误

error: calling a __host__ function("__sqrt") from a __global__ function("square") is not allowed

知道我应该包含哪些库来使用sqrt

c c++ math cuda square-root

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

为什么std :: setbase(2)没有切换到二进制输出?

cppreference页面上std::setbase写着:

除8,10或16之外的基数值将基址重置为零,这对应于十进制输出和前缀相关的输入.

怎么会?

有没有特别的理由为什么只支持这些基地?至少支持16到16(实际上,高达36:0-9然后是az)的任何东西似乎微不足道,而不必做出任何困难的选择.具体来说,2是一个受欢迎的基础,我认为应该有兴趣std::setbase(2)(和相应的std::binary).

我显然可以打印自己的位,但对我的ostream来说这样做会很好.

c++ base ostream c++-standard-library iomanip

6
推荐指数
2
解决办法
1190
查看次数

当显式初始化std :: optional时,我应该使用nullopt吗?

一个std::optional<T>可以被初始化到像这样的分离状态:

std::optional<int> oi { nullopt };
Run Code Online (Sandbox Code Playgroud)

但也像这样:

std::optional<int> oi { };
Run Code Online (Sandbox Code Playgroud)

并且类似地用于分配(oi = {}oi = nullopt).

除了个人偏好/美学意义之外,这些之间是否存在差异,这应该让我更喜欢一个?或者根本没关系?

注意:我问的是我想要显式初始化可选项的情况,而不是默认初始化它(例如强调).

c++ idiomatic optional c++17

6
推荐指数
2
解决办法
1822
查看次数

在您构建的库上使用 CMake 中的 --whole-archive

我有一个 CMake 项目,同时构建了一个静态库并将其与其他代码链接到一个可执行文件中。由于我不会讨论的原因,我希望此链接与--whole-archive链接器标志一起发生。

现在,这个标志很棘手,因为你不能把它添加到任何地方——你必须切换它,然后列出你想要它应用的库,然后取消它。

我在某处读过(URL 使我无法理解),如果您有一个预先存在的库,您可以通过执行以下操作有效地添加此链接器标志:

# Just an example, find_library calls should really be isolated to separate find modules
find_library(FOO_LIBRARY foo)
set(FOO_LIBRARY "-Wl,--whole-archive ${FOO_LIBRARY} -Wl,--no-whole-archive")

add_executable(hello main.c)
target_link_libraries(hello ${FOO_LIBRARY})
Run Code Online (Sandbox Code Playgroud)

没关系。但是,如果它是正在构建的静态库,而您没有预先存在的变量(即您有add_library()CMake 命令的变量),该怎么办?您是否必须手动指示其路径而不是 ${FOO_LIBRARY}?或者是否有其他一些技巧可以用来获取 CMake 在命令行中放置的路径?

此外,如果我要使用某种类似${FOO_LIBRARY}字符串而不是我的静态库目标标识符 - 我相信 CMake 可能会错过依赖项,即它可能不会与修改后的库重新链接(甚至不会构建它),因为 target_link_libraries命令将看到一个奇怪的字符串,而不是另一个目标的标识符。

build cmake ld build-dependencies

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

我真的应该将头文件指定为 target_sources() 吗?

In his Meeting C++ 2019 talk (and also in 2018), presenter Deniz Bahadir recommends that we specify targets' C++ header files using target_sources(), with some of them being PUBLIC or INTERFACE.

But - when I try to do that (using relative paths, like I used to with the good old add_target()), I get this kind of error:

CMake Warning (dev) at CMakeLists.txt:26 (target_sources):
  Policy CMP0076 is not set: target_sources() command converts relative paths
  to absolute.  Run "cmake --help-policy …
Run Code Online (Sandbox Code Playgroud)

c++ cmake header-files buildconfiguration

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