我正在使用CMake命令安装PDB文件,以便在我的C++应用程序的开发人员分发中启用调试.命令如下:
INSTALL(DIRECTORY ${PROJECT_BINARY_DIR}/Debug
DESTINATION bin
FILES_MATCHING
PATTERN *.pdb
)
Run Code Online (Sandbox Code Playgroud)
此外,我已经设法在同一级别的'src'文件夹中安装用于构建开发人员分发的相关源,以便我的顶级分发文件夹看起来像:
include\
src\
lib\
bin\
share\
doc\
3rdparty\
etc\
Run Code Online (Sandbox Code Playgroud)
如何让PDB文件"知道"源的位置(我假设这是必需的)?是否有可以实现此目的的CMake命令?什么是一个小例子?
我还没有找出具体案例.但我即将着手编写一些我认为最终需要这些代码的代码; 所以我想知道是否:
我是一个完整的Ruby新手,我想做的只是运行一个遗留的ruby脚本(这也是Erik Veenstra的开源脚本).我有一个Windows批处理脚本,基本上我正在尝试执行它.我在我的计算机上安装了Ruby,允许它设置路径,我试图运行它,这是我得到的错误:
I:/2011/devl/3rdparty/ruby/Ruby193/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:36:in `require': cannot load such file -- ftools (LoadError)
from I:/2011/devl/3rdparty/ruby/Ruby193/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:36:in `require'
from C:/Users/<blah>/AppData/Local/Temp/tar2rubyscript.d.6692.1/rubyscript2exe/ev/ftools.rb:1:in `<top (required)>'
from I:/2011/devl/3rdparty/ruby/Ruby193/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:36:in `require'
from I:/2011/devl/3rdparty/ruby/Ruby193/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:36:in `require'
from C:/Users/<blah>/AppData/Local/Temp/tar2rubyscript.d.6692.1/rubyscript2exe/init.rb:15:in `<top (required)>'
from I:/2011/devl/path/to/<myrbsrc>/trunk/bin/../src/rubyscript2exe.rb:627:in `load'
from I:/2011/devl/path/to/<myrbsrc>/trunk/bin/../src/rubyscript2exe.rb:627:in `block in <main>'
from I:/2011/devl/path/to/<myrbsrc>/trunk/bin/../src/rubyscript2exe.rb:577:in `block in newlocation'
from I:/2011/devl/path/to/<myrbsrc>/trunk/bin/../src/rubyscript2exe.rb:505:in `block in newlocation'
from I:/2011/devl/path/to/<myrbsrc>/trunk/bin/../src/rubyscript2exe.rb:472:in `newlocation'
from I:/2011/devl/path/to/<myrbsrc>/trunk/bin/../src/rubyscript2exe.rb:505:in `newlocation'
from I:/2011/path/to/<myrbsrc>/trunk/bin/../src/rubyscript2exe.rb:577:in `newlocation'
from I:/2011/devl/path/to/<myrbsrc>/trunk/bin/../src/rubyscript2exe.rb:619:in `<main>'
Run Code Online (Sandbox Code Playgroud)
欣赏有关如何解决此问题的任何想法!如果有帮助我可以发布源代码Ruby代码.
我假设一个双核(每处理器2个核心)机器,带有2个处理器,用于解决后面的问题; 所以共有4个"核心".因此出现了一些自然问题:
假设我编写了一个简单的串行程序并将其构建在Visual Studio中,并在每次运行中运行相同的程序两次,例如,使用不同的输入数据.他们会在同一个处理器上运行吗?或不同的处理器?每个RAM内存分配多少?它是1个处理器(2个内核)的RAM内存还是总RAM?我相信这两个程序可以在不同的处理器上运行,每个程序都应该有1个处理器的RAM内存(2个内核); 但我并非100%肯定.Linux上的行为会有什么不同吗?
现在假设我的程序是使用分布式内存并行接口(如MPI)编写的,我在np参数中使用2个处理器运行一次(比如说).该程序是否会使用两个处理器(实际上是所有4个内核)?这是参数-np的最佳值吗?换句话说,如果我用-np 3或-np 4做同样的事情; 假设没有额外的优势是正确的吗?我想是的,但我并非百分之百确定.我还假设我可以高于4(-np 5,-np 6等).在这种情况下,进程如何以np> 4的值竞争内存?对于np> 4,性能会变差吗?我想是的,也许这部分取决于问题的大小,但同样不是100%肯定.
接下来,假设我运行了两个我的MPI构建的并行程序实例,两个都带有-np 2,每个实例都有不同的输入数据.首先,这可能吗?我假设它们都在两个处理器上运行?这两个程序是如何同步的,它们如何逐个地单独竞争内存?这应该至少部分地基于启动程序的顺序,大概是?
最后,假设我的程序是使用共享内存并行接口(如OpenMP)编写的,并且我运行了一次.我可以运行多少"线程"来充分利用共享内存并行性 - 是2还是4?(因为我有2个处理器,每个处理器有2个核心).我的猜测是4; 因为所有4个内核都是单个共享内存单元的一部分?那是对的吗?如果答案是4; 在超过4个线程上运行是否有意义?我不确定这是否有效(与MPI不同,我相信我们可以做到-np 5,-np 6等等).
最后,假设我运行共享内存并行程序的2个实例,每个实例都有不同的输入数据.我认为这是可能的,并且各个进程会以某种方式竞争内存,可能是程序启动的顺序?
我有两个"插件"(将它们视为软件包中的两个不同的应用程序以供讨论),它们动态链接到我的库的两个单独构建的版本.我的代码是用C++编写的,并且始终使用一致的命名空间.有时我必须为每个应用程序构建两个不同的版本.当同时加载包中的两个应用程序(插件)时,这似乎会导致一些问题.首先,我需要帮助理解为什么会出现此错误.
作为一个例子,我有两个独立但名称相同的库,比如说mylib.so(或DLL),每个应用程序都链接到(唯一的)其中一个.如果底层代码mylib.so是相同的(即命名空间,函数名称等,当然实现略有不同),这会导致问题吗?这两个库的副本是否位于足以避免因模糊或其他链接错误而可能出现的任何问题的独特位置?我想清楚不是..但我想听听专家的意见.
假设上面的描述是引起问题的原因,只是更改库的名称以包括说某些版本信息,例如,mylib_v1.so并mylib_v2.so提供防止歧义错误的保护(基础函数/命名空间名称仍然相同)?我仍然认为不是......但这次我不确定.假设我是对的,我会在我的代码中使用一些宏来更改命名空间,以便在命名空间中包含版本信息(例如,namespace mystuff {}更改为namespace mystuff_v1)至少可以做到这一点吗?欣赏您的见解.
注意:令人惊讶的是,模糊性只发生在Windows上!Linux能够毫无问题地处理第二段中的情况.
我有一个继承自的类boost::noncopyable; 比如,标题摘录如下:
class A : boost::noncopyable {
...
blah
...
private:
struct impl;
boost::scoped_ptr<impl> m_impl;
};
Run Code Online (Sandbox Code Playgroud)
然后在我的解决方案的一个项目中,我有一个类(也恰好继承boost::noncopyable),一个实现细节中的私有成员是对类型A的对象的引用,比如在标题摘录中:
class B : boost::noncopyable {
...
blah
...
private:
struct impl;
boost::scoped_ptr<impl> m_impl;
};
Run Code Online (Sandbox Code Playgroud)
并在实施摘录(cpp)中:
struct B::impl {
impl(A& a) : m_a(a) {}
set_A(A& a) {m_a = a;}
A& m_a;
...
}
B(A& a) : m_impl(new impl(a)) {}
...
Run Code Online (Sandbox Code Playgroud)
然后在我的解决方案的另一个项目中,我有一个继承自B的C类,比如带有标题摘录:
class C : public B {
...
blah;
...
private:
struct impl;
boost::scoped_ptr<impl> m_impl;
};
Run Code Online (Sandbox Code Playgroud)
并在实施摘录(cpp)中:
struct C::impl { …Run Code Online (Sandbox Code Playgroud) 我不确定这一点,搜索有点并没有发现任何特别有用的东西.所以,假设我有一个带有命名空间的头文件,其中包含一些类C1和C2;
namespace my_namesp {
class C1 {
public:
blah1;
...
private:
blah2;
...
};
class C2 {
public:
junk1;
...
private:
junk2;
...
};
} //-End namespace
Run Code Online (Sandbox Code Playgroud)
现在假设在实现(CPP)中,我已经定义了C1,C2的所有成员函数,然后假设我有一些我希望C1和C2共享的常见数据,比如枚举和字符串数组,但我不知道我们一定希望他们成为任何一个班级的一部分.那么执行以下操作是合法的(注意:它构建并且工作正常); 如果我将此实现导出为客户端应用程序的库,该怎么办?这还行吗?这种设计是不是因为我应该注意的任何原因而不受欢迎?也许OOP的一个特定功能可能更适合这种事情?
namespace my_namesp {
enum some_list_num {
list_member1,
list_member2,
...,
list_length
}
static const std::string string_list[] = {
str1,
str2,
...,
strN
}
return_type C1::some_func1(...) {
...
}
...
return_type C1::some_func1(...) {
...
}
} //-End my namespace
Run Code Online (Sandbox Code Playgroud)
再次提前感谢任何想法/更正.
我有一些静态编译的库(.lib),我在我的项目中使用它,它是用C++编写的,并在Windows和Linux上构建.在我项目的这些库的入口点,我只使用静态库套件中"main"库中的一个或两个函数(但我确信这些函数会调用套件中其他库中的许多其他函数) .
理想情况下,我希望有一套动态链接库(DLL)包装在静态库套件中的每个库中; 我已经阅读/听说过在Windows上执行此操作的方法(例如,Visual Studio 2005/2008/2010)是"创建一个包装器DLL",其中一些公开的函数调用底层的静态库函数.如果有人可以在MS Visual Studio 2005/2008/2010中详细介绍如何进行一些片段,我将非常感谢.我相信你们中的一些人可能已经在日常工作中这样做了; 非常感谢您的体验.
编辑:
为了像我这样的其他人的利益,我发布了我发现的第一个"有用的"链接:http: //tom-shelton.net/index.php/2008/12/11/creating-a-managed-wrapper-for- A-LIB文件/
我读过三法则,三法则是什么?总结如下:
如果您需要自己显式声明析构函数,复制构造函数或复制赋值运算符,则可能需要显式声明它们中的所有三个.
我的问题是:在C++应用程序中,我有一个管理资源的类(有一个处理删除指针的析构函数).我知道应用程序在所有地方使用赋值运算符,但我绝对肯定在复制构造函数的应用程序中没有用法,即Class c(..); Class d(c);在这些情况下使用类型,我仍然需要同时实现赋值运算符和复制构造函数?或者一个赋值算子是否足够?赋值运算符是否可能以某种方式使用复制构造函数?
欣赏你的想法.
继续绕圈子,但我仍然不清楚这一点.对答案有感觉; 但不确定.下面哪个代码消耗更多内存?[如果我是正确的,应该是前者.]
double x;
double* y = new double(x);
Run Code Online (Sandbox Code Playgroud)
要么
double x;
double* y = &x;
Run Code Online (Sandbox Code Playgroud)