在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)
这是怎么回事?
使用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()实际返回什么吗?
我有一个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?
谢谢!
我想创建一个范围x从0 ... 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中执行此操作的最简单语法是什么.
我正在 Qt Creator 中制作一个 C++ 项目,使用 cmake 和我自己的 CMakeLists.txt 文件。如何指定我要在调试模式还是发布模式下构建?这是我在 Qt Creator 或 CMakeLists 中设置的吗?
我有一个双打数组,我想用Eigen库创建一个4乘4的矩阵.我还想指定数据以行主顺序存储.我怎样才能做到这一点?
我尝试了以下,但它没有编译:
double data[16];
Eigen::Matrix4d M = Eigen::Map<Eigen::Matrix4d>(data, 4, 4, Eigen::RowMajor);
Run Code Online (Sandbox Code Playgroud) 我的 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?
如果我想创建一个与静态库链接的C++程序,那么最终的可执行文件将包含我程序中的代码和库中的代码(我认为......!).但是我不确定当我与共享库链接时会发生什么.
假设我libfoo.so通过在我的CMakeLists.txt文件中指定行来链接一个被调用的库target_link_libraries(${PROJECT_NAME} foo).我假设最终的可执行文件将包含有关此库的一些信息,但不包含完整的代码.这是什么其他信息?此外,是否必须libfoo.so在用户的系统上完全调用库?
我已经获得了一些源代码和一个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
在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找到这个库?我的理解是,添加解释路径的路径是解决方案,但似乎这可能不正确...
谢谢!