我正在尝试编译代码,我得到错误
未定义的引用
boost::program_options::options_description::m_default_line_length
我在Ubuntu 12.04中使用g ++.虽然我已经完成了一些C++编程,但我还不熟悉Linux开发环境(之前只使用过IDE).
所以我对这个问题做了基本的搜索,发现了一些链接问题.因为我是新手,所以我不太了解他们.阅读其中一些解决方案让我更加困惑.我的boost库文件夹在/usr/include.一些解决方案说它应该在/usr/lib.但我没有任何提升文件夹.
我需要改变什么?
我的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)
在调试二进制文件中使用第三方库的发布版本是不好的做法吗?
我正在使用第三方库并编译了一个发行版.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宏混淆.但我很好奇,如果这是推荐的方式和原因.我需要编译并保留我打算使用的每个第三方库的发布和调试二进制文件的记录,这很麻烦,这很快就会很多,而无意调试这些代码.
我正在使用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)
我是否需要逐个元素地更改?
首先:我完全是互斥/多线程编程的新手,所以对于任何错误提前抱歉...
我有一个运行多个线程的程序.线程(通常每个cpu核心一个)进行大量计算和"思考",然后有时他们决定调用更新某些统计信息的特定(共享)方法.通过使用互斥锁来管理统计信息更新的并发性:
stats_mutex.lock();
common_area->update_thread_stats( ... );
stats_mutex.unlock();
Run Code Online (Sandbox Code Playgroud)
现在来问题了.在所有这些线程中,有一个特定的线程几乎需要
实时优先级,因为它是唯一实际运行的线程.
"几乎是实时优先"的意思是:
假设线程t0是"特权者"而t1 .... t15是正常的.现在发生的是:
我需要的是:
那么,做这件事的最好(可能是最简单的)方法是什么?
我想的是有一个名为"privileged_needs_lock"的bool变量.
但我想我需要另一个互斥锁来管理对这个变量的访问...我不知道这是不是正确的方法......
附加信息:
任何想法都表示赞赏.谢谢
以下解决方案有效(三个互斥方式):
#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) 我有一个关于解析树的问题:
我有一个字符串(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 ++的新手.我刚开始!我在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) 考虑:
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++应用程序,它与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++ ×10
g++ ×3
c++11 ×2
boost ×1
correctness ×1
gcc ×1
kernel ×1
linux ×1
math.h ×1
mutex ×1
namespaces ×1
object-files ×1
opencv ×1
parsing ×1
portability ×1
tree ×1
ubuntu-12.04 ×1