我正在尝试创建一个包含目标文件和现有静态库的静态库,这些库都是在构建过程中先前编译的.有没有一种简单的方法可以使用"ar"来执行此操作,还是需要解压缩(ar x library_name)每个库并将其目标文件添加到统一库中?
我有一个Visual Studio 2005解决方案,其中包含几个彼此独立构建的项目.主项目静态链接其他项目.我在其中一个静态链接库中得到了非常奇怪的STL向量损坏.例如,我声明一个std :: vector然后执行一个sort( thatVector.begin(), thatVector.end() )
,但是当我调试它并查看反汇编时,我看到:
std::vector<SomeOtherClass<SomeOtherTemplateType>,std::allocator<SomeOtherClass<SomeOtherTemplateType> > >::begin
Run Code Online (Sandbox Code Playgroud)
令人难以置信的奇怪的是,SomeOtherClass
并且SomeOtherTemplate
在主项目中声明,所以这个库应该完全不知道它们.
我试过冻结所有其他线程,认为其中一个可能是腐败thatVector
,但没有骰子.我完全失去了.有没有人经历过这样的事情?
编译信息: - 主程序/ Zi,自定义优化(基本上是可调试的发布版本) - 静态库/ Zi,/ Od
链接信息:/ DEBUG
我正在编写一组单元测试,将计算出的值写入文件.每个测试产生一个方形矩阵,可以容纳50,000到500,000的双倍,我总共有128个测试用例组合.
编写cout语句然后将输出汇总到文件中是否有任何重大开销,或者我最好使用ofstream直接写入文件?
[编辑:(从评论中复制)事实证明,问题出在其他地方,但谢谢大家的意见.]
我有一个共享容器类,它使用一个互斥锁来锁定push()和pop()函数,因为我不想同时修改head和tail.这是代码:
int Queue::push( WorkUnit unit )
{
pthread_mutex_lock( &_writeMutex );
int errorCode = 0;
try
{
_queue.push_back( unit );
}
catch( std::bad_alloc )
{
errorCode = 1;
}
pthread_mutex_unlock( &_writeMutex );
return errorCode;
}
Run Code Online (Sandbox Code Playgroud)
当我在调试模式下运行它时,一切都很好.当我在发布模式下运行时,我大致在驱动程序开始推送和"同时"弹出时崩溃.如果try/catch块捕获到std :: bad_alloc异常,它会立即强制退出吗?如果是这样,我应该将函数的其余部分包含在finally块中吗?
此外,较慢的调试模式是否可能成功,因为我的push()和pop()调用从未实际发生过?