我基本上试图在C代码中翻译Matlab代码.这是我上一个问题的延伸.
在Matlab中,我使用了cell-structures哪个持有matrices (double) of variable sizes.这是我的*.mat文件的玩具示例supposed to store:
Matlab代码:
A = [[1 2 3]; [5 7 1]; [3 5 9]];
B = [[2 4];[5 7]];
Creator = 'DKumar';
nFilters = 2;
Filters{1} = [[-1.0 -1.0 -1.0]; [-1.0 8 -1.0]; [-1.0 -1.0 -1.0]];
Filters{2} = 2.0*[[-1.0 -1.0]; [-1.0 8]; [-1.0 -1.0]];
cd('/home/dkumar/CPP_ExampleCodes_DKU/Read_mat_File');
save('Test_FILE.mat', 'A', 'B', 'Creator', 'nFilters', 'Filters');
Run Code Online (Sandbox Code Playgroud)
C代码:功能"matread_Matrix" reads matrices stored in *.mat properly.它的功能"matread_Cell"是应该读取单元结构的not working. …
我在MATLAB中运行一些数据处理工作,求解器使用BACKSLASH运算符.有时,我得到这样的警告:
Warning: Rank deficient, rank = 1390, tol = 1.335195e-010.
Warning: Rank deficient, rank = 1386, tol = 1.333217e-010.
Run Code Online (Sandbox Code Playgroud)
我想抓住那些警告.我正在尝试将警告转换为错误,然后按照标题"陷阱警告"中所述捕获它:http: //undocumentedmatlab.com/blog/trapping-warnings-efficiently 在示例中,以下字符串已用于将警告转换为错误:
s = warning('error', 'MATLAB:DELETE:Permission');
Run Code Online (Sandbox Code Playgroud)
但是,我不确定我的案例使用什么字符串.我试过用
s = warning('error', 'Warning: Rank deficient’);
Run Code Online (Sandbox Code Playgroud)
但是,它没有用.任何帮助,将不胜感激.
问候,DK
我是makefile的新手; 所以,如果我的问题很简单,请接受我的道歉.
问题1:-L和-l选项有什么区别.
问题2:您如何提供某些图书馆的完整路径?例如,下面的makefile中提到的"libeng"和"libmx"位于{MATLABROOT}/bin/glnxa64
# root directory of MATLAB installation
MATLABROOT="/usr/local/MATLAB/R2011b"
all: engdemo
engdemo:
g++ ${MATLABROOT}/extern/examples/eng_mat/engdemo.cpp -o engdemo \
-I${MATLABROOT}/extern/include \
-L${MATLABROOT}/extern/lib -llibeng -llibmx
clean:
rm -f engdemo *.o
Run Code Online (Sandbox Code Playgroud)
更新:以下makefile工作原理:
# root directory of MATLAB installation
MATLABROOT="/usr/local/MATLAB/R2011b"
all: engdemo
engdemo:
g++ ${MATLABROOT}/extern/examples/eng_mat/engdemo.cpp -o engdemo \
-I${MATLABROOT}/extern/include \
#-L${MATLABROOT}/extern/lib -llibeng -llibmx
-L${MATLABROOT}/bin/glnxa64 -llibeng \
-L${MATLABROOT}/bin/glnxa64 -llibmx
clean:
rm -f engdemo *.o
Run Code Online (Sandbox Code Playgroud)
我发现以下关于链接库的链接非常有用:http: //www.cs.swarthmore.edu/~newhall/unixhelp/howto_C_libraries.html
我有一个C-code which works fine使用makefile.现在,我正在尝试提交convert it to mex文件,以便我可以从Matlab运行它.在这里,我也是using makefile approach.但是,mex的makefile给了我错误.
这是我想要与我的mex文件一起编译的tsnnls lib.
C项目组织:
tsnnls_test_DKU.c
Include_4_TSNNLS.c
Include_4_TSNNLS.h
Run Code Online (Sandbox Code Playgroud)
" Include_4_TSNNLS.*"文件具有TestingLibraries()调用第三部分库的功能; 而我试图保持" tsnnls_test_DKU.c"非常简单,因为:
原始代码:tsnnls_test_DKU.c
int TestingLibraries() ;
int main( int argc, char* argv[] )
{
int k = TestingLibraries() ;
return(1);
}
Run Code Online (Sandbox Code Playgroud)
现在,代码已更改:
更改的代码:tsnnls_test_DKU.c:
#include "mex.h"
#include <math.h>
int TestingLibraries() ;
void mexFunction (int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]) {
int k = TestingLibraries() ;
}
Run Code Online (Sandbox Code Playgroud)
原始make文件(有效
CXX = …Run Code Online (Sandbox Code Playgroud) 我想更改我的测试代码的位置(tsnnls_test_DKU.c)无法在makefile中进行更改以正确反映此文件夹更改.一些帮助将不胜感激.
我有两个问题: 1)如何链接来自不同子目录的对象文件2)包括不同的搜索路径(在我的例子中有3个搜索路径).
在我的orinal设置中,makefile工作正常,我将测试代码tsnnls_test_DKU.c放在以下位置(在第三方库内):
Dir1 = /home/dkumar/libtsnnls-2.3.3/tsnnls
Run Code Online (Sandbox Code Playgroud)
我链接到的所有目标文件都在
OBJDir = /home/dkumar/libtsnnls-2.3.3/tsnnls
Run Code Online (Sandbox Code Playgroud)
此外,包含在其中的一些包含文件tsnnls_test_DKU.c位于以下三个位置(三个搜索路径):
Dir1 = /home/dkumar/libtsnnls-2.3.3/tsnnls
Dir2 = /home/dkumar/libtsnnls-2.3.3
Dir3 = /home/dkumar/libtsnnls-2.3.3/tsnnls/taucs_basic
Run Code Online (Sandbox Code Playgroud)
和我的makefile工作正常.
但是,我想将测试代码的位置更改为:
Dir4 = /home/dkumar/CPP_ExampleCodes_DKU/Using_tsnnls_DKU/
Run Code Online (Sandbox Code Playgroud)
这是我的makefile的样子(在其他用户输入后更新:
# A sample Makefile
VPATH = -L/home/dkumar/libtsnnls-2.3.3/tsnnls
INC_PATH = -I/home/dkumar/libtsnnls-2.3.3/ -I/home/dkumar/libtsnnls-2.3.3/tsnnls/ -I/home/dkumar/libtsnnls-2.3.3/tsnnls/taucs_basic/
# Here is a simple Make Macro.
LINK_TARGET = tsnnls_test_DKU
OBJS_LOC = tsnnls_test_DKU.o
# Here is a Make Macro that uses the backslash to extend to multiple lines.
OBJS = libtsnnls_la-taucs_malloc.o libtsnnls_la-taucs_ccs_order.o \ …Run Code Online (Sandbox Code Playgroud) 我在 WSL2 中安装了 Ubuntu 18.04LTS,并且能够使用 GPU。我可以从窗口运行终端运行 $nvidia-smi 。
但是,当我在 WSL2 上运行 $nvidia-smi 时找不到任何结果
我试图找出我的C ++项目的依赖关系。我有该项目的.dll和.so文件。
我正在尝试使用依赖关系遍历来找出依赖关系。我认为我已经设置了正确的搜索路径。但是,它仍然会出现错误:
API-MS-WIN-APPMODEL-RUNTIME-L1-1-0.DLL: error opening file the system cannot find the file specified
Run Code Online (Sandbox Code Playgroud)
以及其他文件的类似错误:
API-MS-WIN-CORE-WINRT-ERROR-L1-1-0.DLL
API-MS-WIN-CORE-WINRT-L1-1-0.DLL
API-MS-WIN-CORE-WINRT-ROBUFFER-L1-1-0.DLL
API-MS-WIN-CORE-WINRT-STRING-L1-1-0.DLL
API-MS-WIN-SHCORE-SCALING-L1-1-1.DLL
DCOMP.DLL
GPSVC.DLL
IESHIMS.DLL
Run Code Online (Sandbox Code Playgroud)
我搜索了这些.dll文件,这些文件甚至不在我的计算机上。有人可以帮我吗?
有人可以建议替代依赖漫步者吗?
我正在尝试编译代码,它正在获得多个定义的链接错误.不幸的是,我无法解决它,任何帮助将不胜感激.
我有以下文件:头文件:CEST.h; CEST_UI.h; GlobalVariable.h;
源文件:CEST.cpp; CEST_UI.cpp; GlobalVariable.cpp
声称具有多个定义的所有参数在"GlobalVariable.h"中定义,并在"GlobalVariable.cpp"中初始化.
我两次包括"GlobalVariable.h":一次在CEST.cpp中,第二次在CEST_UI.cpp中.
我在想"GlobalVariable.h"中的后续保护会保护我多重定义链接错误:
# ifndef GLOBALVARIABLE_H
#define GLOBALVARIABLE_H
………….
………….
#endif
Run Code Online (Sandbox Code Playgroud)
我还附加了"GlobalVariable.h"和"GlobalVariable.cpp",以便您可以查看.
在"GlobalVariable.h"中
# ifndef GLOBALVARIABLE_H
#define GLOBALVARIABLE_H
#include <vector>
////////////////////////////////////////
extern long lFA_MTPulse;
extern long lNoOfMTPulses;
extern long ltDK_MTPulse_Duration_us;
//extern long ltDK_MTPulse_Delay_us;
extern long ltDK_Wait_After_MT_us;
extern long ltDK_Wait_After_MTSpoil_us;
extern long lNoOfMTPulses_PerRTEB;
extern long ltDK_PreAcqCESTPulseTime_ms;
extern long ltDK_PreAcqCESTPulseTime_us;
extern long lTest_XgradStrength;
//double TR_MTPulse_Remain = 0.0; // CEST This will be calculated later
long ltDK_TR_MTPulse_us;
long ltDK_TimeNeeded_for_sMTCSpoilerOnly;
long ltDK_MTBlockTime_DK;
////////////////////////////////////////
extern double dBWTimeProd;
extern …Run Code Online (Sandbox Code Playgroud) 最近我开始使用Armadillo C++库.鉴于我的C++编码技巧不是很好,我发现这对线性代数非常友好.我也在使用它与我的matlab一起为许多重建算法加速.
我确实需要创建一个布尔值的向量,我宁愿使用这个库而不是.但是,我无法弄清楚如何去做.我尝试过使用uvec; 但是,文档似乎表明它不能与boolean一起使用.
任何帮助,将不胜感激.
此致,Dushyant
我正在尝试使用C++来理解西门子扫描仪的编程,并且鉴于我的C++技能有限,我在理解供应商提供的代码的许多部分时遇到了问题.
例如,代码使用引用(rMrProt)来对象MrProt和符号(例如使用().和()[].)对我来说非常困惑.例如:
ImageSamples = rMrProt.kSpace().baseResolution()
ImageSize = rMrProt.sliceSeries()[0].readoutFOV()
Run Code Online (Sandbox Code Playgroud)
对这些陈述的一些解释将不胜感激.
有关对象MrProt的所有信息都在"MrProt.h","MrProt.dll","MrProt.lib"中.所有这些文件均已在以下网址分享:https: //docs.google.com/open?id = 0B0Ah9soYnrlIYWZkNDU2M2EtYTNmNC00YTc5LTllMzItYzIyMWU4M2ZhY2Fi
此外,我一直试图读取MrProt.dll和MrProt.lib没有任何成功.直到现在,我才知道了dumpbin.任何帮助,将不胜感激.
我所遇到的另一个困惑是与MrProt.h本身的某些部分有关.MrProt.h中有一条声明:
class __IMP_EXP MrProt: public MrProtocolData::MrProtDataDelegate
{
typedef MrProtocolData::MrProtDataDelegate BasicImplementation;
public:
MrProt();
MrProt(const MrProt& rSource);
…
….
}
Run Code Online (Sandbox Code Playgroud)
在这里,__IMP_EXP我想这是一些编译器特定的东西..一些装饰等.但是,我仍然不知道该怎么做.
我正在为MRI扫描仪编码,基本要求是任何序列代码都应该在visual studio和linux上运行.
我有一部分代码可以在visual studio 2008上正常工作; 但是,在linux上给我错误.
有人可以告诉我,我做错了什么?
template<typename type1, typename type2, typename type3>
void PrintVector3(type1 VectorIn_1, type2 VectorIn_2, type3 VectorIn_3) {
type1::const_iterator i1 = VectorIn_1.begin();
type2::const_iterator i2 = VectorIn_2.begin();
type3::const_iterator i3 = VectorIn_3.begin();
int lLenghtVec = VectorIn_1.n_elem();
for(int i = 0; i != lLenghtVec; ++i){
std::cout << std::setfill('0') << std::setw(3) << *i1 << " " << *i2 << " " << *i3 <<std::endl;
++i3; ++i2; ++i1;
}
}
Run Code Online (Sandbox Code Playgroud)
我得到的错误:
CESTiPAT/ReorderInfo_DK.h:185: error: expected ';' before 'i1'
CESTiPAT/ReorderInfo_DK.h:186: error: expected ';' before …Run Code Online (Sandbox Code Playgroud) 我编写了一个mex代码,它从matlab代码向C代码发送标量和矩阵.它适用于较小的矩阵.但是,当我尝试传递大的稀疏矩阵(大小~8448 x 3264)时,matlab崩溃并出现以下错误:
我收到以下错误:Matlab遇到内部问题,需要关闭.
*Detailed error report*
------------------------------------------------------------------------
Segmentation violation detected at Mon Feb 9 13:21:48 2015
------------------------------------------------------------------------
Configuration:
Crash Decoding : Disabled
Current Visual : None
Default Encoding : UTF-8
GNU C Library : 2.19 stable
MATLAB Architecture: glnxa64
MATLAB Root : /usr/local/MATLAB/R2014b
MATLAB Version : 8.4.0.150421 (R2014b)
Operating System : Linux 3.13.0-37-generic #64-Ubuntu SMP Mon Sep 22 21:28:38 UTC 2014 x86_64
Processor ID : x86 Family 6 Model 44 Stepping 2, GenuineIntel
Software OpenGL : 1
Virtual …Run Code Online (Sandbox Code Playgroud) 有人可以让我知道指针 "*&" 的C等价物吗?
换句话说,如果我的函数在C++中是这样的:
void func(int* p, int*& pr)
{
p++;
pr++;
}
Run Code Online (Sandbox Code Playgroud)
在C中转换它时,我如何更改第二个参数?
更新: @MikeDeSimone:如果我理解了翻译的代码,请告诉我?让我从初始化变量开始:
int i = 10;
int *p1 = &i;
int **pr= &p1;
Run Code Online (Sandbox Code Playgroud)
所以,当你执行(*pr)++时,这基本上相当于:
(p1)++
Run Code Online (Sandbox Code Playgroud)
但是,我无法理解main()内部的外观如何?
问题2:如果我有这样的代码片段,我该怎么办?
void pass_by_reference(int*& p)
{
//Allocate new memory in p: this change would reflect in main
p = new int;
}
Run Code Online (Sandbox Code Playgroud)