小编Kar*_*rus的帖子

链接到共享库时,cmake中没有"制定目标的规则"错误

在Ubuntu中,我已经下载了第三方共享库,mylibrary.so我已将其放在目录中/home/karnivaurus/Libraries.我还放置了相关的头文件,myheader.h在目录中/home/karnivaurus/Headers.我现在想要使用cmake在我的C++代码中链接到这个库.这是我的CMakeLists.txt文件:

cmake_minimum_required(VERSION 2.0.0)

project(DemoProject)

include_directories(/home/karnivaurus/Headers)

add_executable(demo demo.cpp)

target_link_libraries(demo /home/karnivaurus/Libraries/mylibrary)
Run Code Online (Sandbox Code Playgroud)

但是,这给了我错误消息:

:-1: error: No rule to make target `/home/karnivaurus/Libraries/mylibrary', needed by `demo'.  Stop.
Run Code Online (Sandbox Code Playgroud)

这是怎么回事?

c++ cmake shared-libraries libraries

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

Transform::linear() 在 Eigen 库中返回什么?

使用EigenC++ 库,我无法理解该Transform::linear()函数。根据文档,它返回the linear part of the transformation. 但是,这是什么意思?确定所有矩阵变换都是线性的吗?

此外,从其他地方看到的一些例子来看,它返回的值似乎是一个Eigen::Matrix3d(或者可以隐式转换为这个)。对我来说,这表明它可能只返回变换的旋转部分,即长度为 3(x、y 和 z)。但是,还有一个Transform::rotation()函数,根据文档返回the rotation part of the transformation.

那么有人可以向我解释Transform::linear()实际返回什么吗?

matrix linear-algebra eigen

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

与 CMakeLists 链接:ld 找不到库

我有一个CMakeLists.txt文件,内容如下:

target_link_libraries(${PROJECT_NAME} OpenNI2)
Run Code Online (Sandbox Code Playgroud)

当我运行时cmake,我没有收到任何错误。但是当我运行时make,我收到以下错误:

/usr/bin/ld: cannot find -lOpenNI2
Run Code Online (Sandbox Code Playgroud)

但是,libOpenNI2.so我的构建目录中有一个名为的文件。那么为什么ld找不到这个呢?我认为构建目录在target_link_libraries?

谢谢!

c++ ubuntu makefile cmake

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

创建没有特定数字的范围

我想创建一个范围x0 ... n,没有任何在列表中的号码y.我怎样才能做到这一点?

例如:

n = 10
y = [3, 7, 8]
x = # Do Something
Run Code Online (Sandbox Code Playgroud)

应该给出输出:

x = [0, 1, 2, 4, 5, 6, 9]
Run Code Online (Sandbox Code Playgroud)

一种天真的方式是连接几个范围,每个范围跨越一组已经与数字相交的数字y.但是,我不确定在Python中执行此操作的最简单语法是什么.

python range

5
推荐指数
2
解决办法
5187
查看次数

Qt Creator:如何设置调试或发布模式

我正在 Qt Creator 中制作一个 C++ 项目,使用 cmake 和我自己的 CMakeLists.txt 文件。如何指定我要在调试模式还是发布模式下构建?这是我在 Qt Creator 或 CMakeLists 中设置的吗?

qt qt-creator

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

从具有行主顺序的数组创建特征矩阵

我有一个双打数组,我想用Eigen库创建一个4乘4的矩阵.我还想指定数据以行主顺序存储.我怎样才能做到这一点?

我尝试了以下,但它没有编译:

double data[16];
Eigen::Matrix4d M = Eigen::Map<Eigen::Matrix4d>(data, 4, 4, Eigen::RowMajor);
Run Code Online (Sandbox Code Playgroud)

c++ matrix eigen

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

OpenGL:在着色器中定义变量

我的 OpenGL 程序,使用 GLSL 作为着色器,有一个简单的顶点和片段着色器(由教程提供)。

顶点着色器是:

#version 330

layout (location = 0) in vec3 Position;

void main()
{
    gl_Position = vec4(0.5 * Position.x, 0.5 * Position.y, Position.z, 1.0);
}
Run Code Online (Sandbox Code Playgroud)

片段着色器是:

#version 330

out vec4 FragColor;

void main()
{
    FragColor = vec4(1.0, 0.0, 0.0, 1.0);
}
Run Code Online (Sandbox Code Playgroud)

这里发生的事情是顶点着色器将顶点坐标除以 2,然后片段着色器将其着色为红色。

现在根据我的理解,gl_Position告诉片段着色器这个向量的像素坐标。并且gl_Position是两个着色器都知道的现有变量,因此片段着色器gl_Position在决定在哪里绘制该顶点时将始终寻找。

但是,呢FragColor?在这个例子中,它是在片段着色器中手动定义的。那么 OpenGL 如何知道这FragColor是我们用来设置顶点颜色的变量呢?FragColor可以用不同的名称定义并且程序仍然以相同的方式运行。

所以我想知道为什么gl_PositionOpenGL 已经定义了一个变量,而FragColor手动定义的,以及 OpenGL 如何知道如何解释FragColor

opengl glsl

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

链接共享库时添加到可执行文件的内容是什么?

如果我想创建一个与静态库链接的C++程序,那么最终的可执行文件将包含我程序中的代码和库中的代码(我认为......!).但是我不确定当我与共享库链接时会发生什么.

假设我libfoo.so通过在我的CMakeLists.txt文件中指定行来链接一个被调用的库target_link_libraries(${PROJECT_NAME} foo).我假设最终的可执行文件将包含有关此库的一些信息,但不包含完整的代码.这是什么其他信息?此外,是否必须libfoo.so在用户的系统上完全调用库?

c++ unix linux

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

cmake 变量和 cmake 参数之间的区别

我已经获得了一些源代码和一个CMakeLists.txt文件,并被告知通过以下方式运行 cmake:

cmake ../src -DOPEN_NI_ROOT=/home/karnivaurus/OpenNI
Run Code Online (Sandbox Code Playgroud)

我还注意到有一个名为 的文件,我相信在cmake 调用FindOpenNI.cmake时会使用该文件。find_package(OpenNI)

因此,我猜测这OPEN_NI_ROOT是 cmake 用于其余设置的某种变量。

但是,我尝试将该行插入set(OPEN_NI_ROOT "/home/karnivaurus/OpenNI")到我的CMakeLists.txt文件中,以避免需要在命令行中将其添加为参数。但这似乎并没有做同样的事情。

有人可以解释一下这两种变量类型有何不同吗?


该文件FindOpenNI.cmake是开源的,可以在以下位置找到: https: //github.com/victorprad/InfiniTAM/blob/master/InfiniTAM/cmake/FindOpenNI.cmake

c++ ubuntu cmake

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

将库目录添加到PyCharm

在Ubuntu 15.10上,我正在运行PyCharm Community Edition版本2016.1.我有一个调用的Python文件import tensorflow,一个依赖于CUDA库的模块libcudart.so.7.5.当我运行此文件时,我收到以下错误消息:

ImportError: libcudart.so.7.5: cannot open shared object file: No such file or directory
Run Code Online (Sandbox Code Playgroud)

现在,该文件libcudart.so.7.5位于我的机器上/usr/local/cuda-7.5/lib64.在Pycharm中,我添加了这条路径File->Settings->Project Interpreter->Interpreter Paths.所以,我很困惑为什么PyCharm找不到libcudart.so.7.5包含它的目录被列为解释器路径.

此外,如果我从命令行运行此文件,它运行正常没有上述错误.在我的.bashrc文件中,我有一句话:

export LD_LIBRARY_PATH=/usr/local/cuda-7.5/lib64:$LD_LIBRARY_PATH
Run Code Online (Sandbox Code Playgroud)

所以这似乎是允许找到库文件.但是我怎样才能让PyCharm找到这个库?我的理解是,添加解释路径的路径是解决方案,但似乎这可能不正确...

谢谢!

python importerror pycharm

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