标签: c++

未定义的引用`boost :: program_options :: options_description :: m_default_line_length'

我正在尝试编译代码,我得到错误

未定义的引用 boost::program_options::options_description::m_default_line_length

我在Ubuntu 12.04中使用g ++.虽然我已经完成了一些C++编程,但我还不熟悉Linux开发环境(之前只使用过IDE).

所以我对这个问题做了基本的搜索,发现了一些链接问题.因为我是新手,所以我不太了解他们.阅读其中一些解决方案让我更加困惑.我的boost库文件夹在/usr/include.一些解决方案说它应该在/usr/lib.但我没有任何提升文件夹.

我需要改变什么?

c++ boost g++ ubuntu-12.04

25
推荐指数
3
解决办法
3万
查看次数

内核开发和C++

据我所知,即使普通操作系统有部分用其他语言编写,内核完全用C语言编写.

我想知道用C++编写内核是否可行,如果没有,那将是什么缺点.

c++ operating-system kernel

25
推荐指数
4
解决办法
3万
查看次数

为什么g ++看起来在LIBRARY_PATH /../ lib64中,这在哪里记录?

我的LIBRARY_PATH环境变量中有一个自定义目录:/cs/public/lib/pkg/opencv/lib.

但是,当我使用时g++ --print-search-dirs,我得到了这个:

libraries: =
/cs/public/lib/pkg/opencv/lib/x86_64-suse-linux/4.6/:
/cs/public/lib/pkg/opencv/lib/../lib64/:
/usr/lib64/gcc/x86_64-suse-linux/4.6/:
/usr/lib64/gcc/x86_64-suse-linux/4.6/../../../../x86_64-suse-linux/lib/x86_64-suse-linux/4.6/:
/usr/lib64/gcc/x86_64-suse-linux/4.6/../../../../x86_64-suse-linux/lib/../lib64/:
/usr/lib64/gcc/x86_64-suse-linux/4.6/../../../x86_64-suse-linux/4.6/:
/usr/lib64/gcc/x86_64-suse-linux/4.6/../../../../lib64/:
/lib/x86_64-suse-linux/4.6/:
/lib/../lib64/:
/usr/lib/x86_64-suse-linux/4.6/:
/usr/lib/../lib64/:
/cs/public/lib/pkg/opencv/lib/:
/usr/lib64/gcc/x86_64-suse-linux/4.6/../../../../x86_64-suse-linux/lib/:
/usr/lib64/gcc/x86_64-suse-linux/4.6/../../../:
/lib/:
/usr/lib/
Run Code Online (Sandbox Code Playgroud)

为什么我在LIBRARY_PATH变量中明确指定之前,g ++会查看这些替代方案以及一大堆其他系统位置,以及这在哪里记录?

我会理解是否在LIBRARY_PATH和LIBRARY_PATH /../ lib64等之前搜索了系统默认值,但是g ++将LIBRARY_PATH /../ lib64,然后是系统路径,然后是LIBRARY_PATH.这个订单在哪里记录?

我的g ++版本是 g++ (SUSE Linux) 4.6.2

我的操作系统是 openSUSE 12.1 (x86_64)

c++ linux gcc g++

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

混合调试和发布库/二进制 - 不好的做法?

在调试二进制文件中使用第三方库的发布版本是不好的做法吗?

我正在使用第三方库并编译了一个发行版.lib库.我的exe是在调试模式开发中.然后我得到了:

error LNK2038: mismatch detected for '_ITERATOR_DEBUG_LEVEL': value '0' doesn't match value '2' in test1.obj
Run Code Online (Sandbox Code Playgroud)

经过一些谷歌搜索,我发现这是因为我试图将发布与调试混合,我应该在调试模式下编译库,或者与_ITERATOR_DEBUG_LEVEL宏混淆.但我很好奇,如果这是推荐的方式和原因.我需要编译并保留我打算使用的每个第三方库的发布和调试二进制文件的记录,这很麻烦,这很快就会很多,而无意调试这些代码.

c++ visual-studio-2010 visual-studio

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

在OpenCV中更新Mat的子矩阵

我正在使用OpenCV和C++.我有一个像这样的矩阵X.

Mat X = Mat::zeros(13,6,CV_32FC1);
Run Code Online (Sandbox Code Playgroud)

我想更新它的子矩阵4x3,但我怀疑如何以有效的方式访问该矩阵.

Mat mat43= Mat::eye(4,3,CV_32FC1);  //this is a submatrix at position (4,4)
Run Code Online (Sandbox Code Playgroud)

我是否需要逐个元素地更改?

c++ opencv

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

如何在互斥锁定中优先使用特权线程?

首先:我完全是互斥/多线程编程的新手,所以对于任何错误提前抱歉...

我有一个运行多个线程的程序.线程(通常每个cpu核心一个)进行大量计算和"思考",然后有时他们决定调用更新某些统计信息的特定(共享)方法.通过使用互斥锁来管理统计信息更新的并发性:

stats_mutex.lock();
common_area->update_thread_stats( ... );
stats_mutex.unlock();
Run Code Online (Sandbox Code Playgroud)

现在来问题了.在所有这些线程中,有一个特定的线程几乎需要
实时优先级,因为它是唯一实际运行的线程.

"几乎是实时优先"的意思是:

假设线程t0是"特权者"而t1 .... t15是正常的.现在发生的是:

  • 线程t1获得锁定.
  • 线程t2,t3,t0调用lock()方法并等待它成功.
  • 线程t1调用unlock()
  • 线程t2,t3,t0中的一个(随机地,据我所知)成功获得锁定,而其他线程继续等待.

我需要的是:

  • 线程t1获得锁定.
  • 线程t2,t3,t0调用lock()方法并等待它成功.
  • 线程t1调用unlock()
  • 线程t0获得锁定,因为它具有特权

那么,做这件事的最好(可能是最简单的)方法是什么?

我想的是有一个名为"privileged_needs_lock"的bool变量.

但我想我需要另一个互斥锁来管理对这个变量的访问...我不知道这是不是正确的方法......

附加信息:

  • 我的线程使用C++ 11(从gcc 4.6.3开始)
  • 代码需要在Linux和Windows上运行(但目前仅在Linux上进行测试).
  • 锁定机制的性能不是问题(我的性能问题是在内部线程计算中,并且线程数总是很低,每个cpu核心最多一个或两个)

任何想法都表示赞赏.谢谢


以下解决方案有效(三个互斥方式):

#include <thread>
#include <iostream>
#include "unistd.h"

std::mutex M;
std::mutex N;
std::mutex L;

void lowpriolock(){
  L.lock();
  N.lock();
  M.lock();
  N.unlock();
}

void lowpriounlock(){
  M.unlock();
  L.unlock();
}

void highpriolock(){
  N.lock();
  M.lock();
  N.unlock();
}

void highpriounlock(){
  M.unlock();
}

void hpt(const char* s){
  using namespace std;
  //cout << "hpt trying to get …
Run Code Online (Sandbox Code Playgroud)

c++ multithreading mutex c++11

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

在c ++中解析数学表达式

我有一个关于解析树的问题:

我有一个字符串(math expresion estring),例如:(a+b)*c-(d-e)*f/g.我必须在树中解析该表达式:

class Exp{};
class Term: public Exp{
    int n_;
}

class Node: Public Exp{
    Exp* loperator_;
    Exp* roperator_;
    char operation; // +, -, *, /
}
Run Code Online (Sandbox Code Playgroud)

我可以用什么算法来构建一个代表上面表达式字符串的树?

c++ tree parsing

24
推荐指数
4
解决办法
4万
查看次数

Visual c ++无法打开包含文件'iostream'

我是c ++的新手.我刚开始!我在visual c ++ 2010 Express版本上尝试了一个代码,但是我收到了以下代码错误消息.

------ Build started: Project: abc, Configuration: Debug Win32 ------
  ugo.cpp
c:\users\castle\documents\visual studio 2010\projects\abc\abc\ugo.cpp(3): fatal error C1083: Cannot open include file: 'iostream': No such file or directory
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

这是代码

// first.cpp -- displays a message


#include <iostream>   // a PREPROCESSOR directive

int main(void)        // function header
{             // start of a function body
  using namespace std;
  cout << "Come up and C++ me sometime.\n";  // …
Run Code Online (Sandbox Code Playgroud)

c++

24
推荐指数
3
解决办法
10万
查看次数

何时使用std :: ref是必要的?

考虑:

std::tuple<int , const A&> func (const A& a) 
{
  return std::make_tuple( 0 , std::ref(a) );
}
Run Code Online (Sandbox Code Playgroud)

是否std::ref需要编写正确且可移植的代码?(没有它就编译好了)

背景:

如果我删除std::ref我的代码生成没有任何警告(g++-4.6 -Wall),但没有正确运行.

如有兴趣,可定义A:

struct A {
  std::array<int,2> vec;
  typedef int type_t;

  template<typename... OPs,typename... VALs>
  A& operator=(const std::pair< std::tuple<VALs...> , std::tuple<OPs...> >& e) {
    for( int i = 0 ; i < vec.size() ; ++i ) {
      vec[i] = eval( extract(i,e.first) , e.second );
    }
  }
};
Run Code Online (Sandbox Code Playgroud)

c++ portability correctness c++11

24
推荐指数
3
解决办法
8246
查看次数

字符串常量之前的预期unqualified-id

我目前正在编写一个C++应用程序,它与math.h一起实现了一个振荡器.我的代码应该适用于应用程序(尝试编译目标文件),我得到的编译器错误很可能与语法/等有关; 我认为它与命名空间有关.错误:

终端输出:

User-Name-Macbook-Pro:Synth Parts UserName$ make
g++ -o Oscillators.o -c -I. Oscillators.cpp -c
In file included from Oscillators.cpp:2:
/usr/include/math.h:41: error: expected unqualified-id before string constant
In file included from /usr/include/c++/4.2.1/bits/locale_facets.tcc:42,
             from /usr/include/c++/4.2.1/locale:46,
             from /usr/include/c++/4.2.1/bits/ostream.tcc:46,
             from /usr/include/c++/4.2.1/ostream:635,
             from /usr/include/c++/4.2.1/iostream:45,
             from Oscillators.cpp:4:
/usr/include/c++/4.2.1/typeinfo:41: error: expected declaration before end of line
make: *** [Oscillators.o] Error 1
Run Code Online (Sandbox Code Playgroud)

Oscillators.cpp

#include "Oscillators.h"
#include <math.h>
#include <vector>
#include <iostream>

#define TWOPI (6.2831853072)

using namespace std;

oscillator(int srate = 44100, int tabsize = 8192, double freq = …
Run Code Online (Sandbox Code Playgroud)

c++ namespaces g++ math.h object-files

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