我的母语不是英语,所以请原谅任何拼写或语法错误我不是编译专家,对构建及其错误也没有任何有用的经验我是C#程序员,主要在MS环境中工作我只知道3个“必须知道才能在Linux命令中生存”“./configure、make&makeinstall”来self的Linux小经验我的开发环境我使用的是Windows7工作站用Cygwin和MinGW(作为Linux的“替代品”)进行编译。问题我想在主要为Linux发行版编写的Windows上编译C源代码。/配置工作没有问题。如果我使用命令make编译源代码,我会遇到以下错误:Errorgrib_keys.c:50:34:error:'alph
我正在用C编写一个应用程序,它可以在运行时通过模块/共享对象/DLL进行扩展。这些模块可能会使用现有程序的API,但也可能会提供新功能供以后加载的模块使用,因此模块之间存在相互依赖的可能性。我目前在Linux下的做法是让每个模块都定义一个depends()函数,该函数返回它所依赖的其他模块名称的列表。这样,我就可以自行编译和链接每个模块,使用dlopen()和RTLD_LAZY加载模块,首先解决其依赖关系,然后使用RTLD_GLOBAL完全加载它。这工作得很好并且完全符合我的要求。它还允许我用不同版本替换一个模块,而无需重新编译依赖它的所有其他模块。将其移植到Windows时会出现实际
我在Windows应用程序中使用SQLite3。我有源代码(所谓的SQLite合并)。有时我必须执行繁重的查询。也就是说,我在准备好的语句上调用了sqlite3_step,它需要很长时间才能完成(由于I/O负载很重)。我想知道是否有可能中止这样的调用。如果能够在同一线程调用的中间进行一些后台处理,我也会很高兴(因为大部分时间都花在等待I/O完成上).我想过自己修改SQLite代码。在最简单的情况下,我可以在每次调用ReadFile/WriteFile之前检查一些条件(例如中止事件句柄),并适本地返回错误代码。并且为了允许后台处理,文件应该以重叠模式打开(这会启用异步ReadFile/W
在Windows中,有一个默认的C库msvcrt.dll。是否可以编写仅使用msvcrt.dll函数的简单C程序?这样就无需安装最新的VC运行时。我认为一种可能的方法是显式指定/NODEFAULTLIB,并使用dll导入过程导入msvcrt.dll函数。有人知道吗? 最佳答案 您可以使用MinGW-w64GCC,它链接到msvcrt.dll正是出于您所说的原因。您可以找到下载here.如果您不想重新分发任何DLL,您可以使用-static-libgcc-static-libstdc++链接您的程序。也就是说,您只需将msvcr*.d
我正在编写一个模拟套接字行为的跨平台库,在两者之间具有附加功能(应用程序->mylib->套接字)。我希望它对程序员来说尽可能透明,因此select和poll等原语必须相应地与这个lib一起工作。问题是当数据在真实套接字中变得可用(例如)时,它必须经过很多处理,所以如果select指向真实套接字fd,应用程序将被阻塞很多时间。我希望选择/轮询仅在准备好使用数据时(在我的库完成所有处理之后)解除阻塞。所以我遇到了这个eventfd,它允许我做我想做的事,即在给定的fd上操纵选择/轮询行为。由于我对Linux环境比较熟悉,所以我不知道eventfd在windows中的作用是什么。尝试搜索但
我在Linux(特别是Ubuntu)上使用MinGW为Windows编译C程序。我正在使用一个名为SFML的库,它的绑定(bind)名为CSFML。我正在使用-L和-l来定位库,但在编译时出现此错误:win32/dll/csfml-audio-2.dll:filenotrecognized:Fileformatnotrecognised我不知道为什么。这是我用来编译的命令:sudoi686-w64-mingw32-gcc-owanderingsrc/main.csrc/constants.csrc/Display/display.c**...somemorecfilesinhere..
我想为我正在维护的C库添加Unicode支持。目前它希望所有字符串都以utf8编码传递。根据反馈,Windows通常提供3个功能版本。fooA()ANSI编码字符串fooW()Unicode编码字符串foo()字符串编码取决于UNICODE定义有没有一种无需自己编写大量包装函数即可添加此支持的简单方法?一些函数可以从库中调用,也可以由用户调用,这使情况变得有点复杂。我想保留对utf8字符串的支持,因为该库可在多个操作系统上使用。 最佳答案 没有后缀的foo函数实际上是宏。fooA函数已过时,是fooW函数的简单包装器,它们是唯一实际
我正在处理一个有大小限制的项目,所以我不想链接到VisualStudio的C运行时。我使用静态运行时(/MT)和/NODEFAULTLIB:LIBCMT标志来执行此操作。我已经通过检查VS附带的运行时源解决了大部分问题。但是,编译器仍然会生成一些未解析的外部符号:_chkstk:生成用于检查大于4k的函数的堆栈。我可以关闭它或提供虚拟功能吗?__libm_sse2_pow和其他SSE调用:我可以通过关闭SSE代码生成来避免这些,但如果可能的话,我希望拥有它们。这些符号似乎来自Intel库(libmmd.lib?)。为什么这部分仍然是C运行时?_ftol2_sse:将浮点型转换为长整型。
您好,我想学习在C中使用MPI。我在Windows7上使用Codeblocks我运行了这个程序:#include#includevoidmain(intargc,char*argv[]){interr;err=MPI_Init(&argc,&argv);printf("Helloworld!\n");err=MPI_Finalize();}但出于某种原因,我在“mpi.h”处遇到错误。有没有办法添加库? 最佳答案 首先,安装MPI的实现。过去我使用过MPICH,但还有其他可用的实现。我知道另一个是LAM/MPI。查看维基百科页面以获
我正在与采用char**(即指向字符串的指针)的代码进行交互:intDoSomething(Whatever*handle,char**error);基本上,它需要一个状态句柄,如果出现问题,它会返回错误代码和可选的错误消息(内存是在外部分配的,并通过第二个函数释放。那部分我已经弄明白了:)).但是,我不确定如何在C#中处理in。我目前拥有的:[DllImport("mydll.dll",CallingConvention=CallingConvention.Cdecl)]privatestaticunsafeexternintDoSomething(IntPtrhandle,byte