C/C++

about C and C++ programming

六月 21, 2017

解决mingw中gcc生成静态库,另一个动态库或exe使用此静态库的问题

注意:以下都是基于CMake来配置项目 现在有三个项目:libA,一个代码库项目;libB,使用libA的另一个动态库;exeC,一个使用libA的可执行程序。 按照正常设置,libA生成动态库,libB和exeC使用libA,都没问题,完美编译通过并可正常执行。但由于发布问题,libA不想发布到用户手中,所以想把libA做成静态库,libB封装libA,将libA静态链接到libB中,同样exeC静态链接libA到exeC中。 于是如下设置libA,在libA的add_library()中增加STATIC标志: [...]
Read More »

四月 4, 2017

怪异的 Linker Error LNK2019

今天碰到一个很奇怪的链接错误:LNK2019. 通常碰到这个问题,都是因为只有申明没有实现导致的。要么是lib库没链接进来,要么是工程中只有头文件,没有添加其对应的cpp文件,导致只有申明没有定义。 而今天碰到的奇葩问题是,同一个工程里,h文件及其对应的cpp文件都在工程中,而且通过h文件中的函数申明按F12键转到定义也没问题,即,申明和定义都没问题。 最后猛然发现,[...]
Read More »

十一月 30, 2015

在Unity Android 程序中使用动态库及注意事项

很多C/C++代码以动态库的方式供第三方调用,在Unity中,这类文件(dll for windows, *.so file for Android/Linux, *.dylib for MAC OSX)叫插件。 在Unity开发的Android程序中使用动态库插件是非常方便的,曾经因为被误导而放弃使用unity,转而研究Android通过原生Java的JNI方式包装*.so文件,虽然还行,但是JNI晦涩丑陋的API实在看着不舒服。相对而言,C#也是可以直接包装*.so文件并在Android系统中直接调用的,而且Unity制作Android[...]
Read More »

十一月 12, 2015

Eclipse 创建、生成NDK步骤总结

本说明基于Eclipse+ADT+CDT开发,Eclipse版本号:Mars.1 Release 4.5.1、ADT版本:23.0.7.2120684、CDT版本:8.8.0.201509131935。 注:部分内容来自网络,这里只是做个资料收集整理,为自己和其他读者提供便利。 1、搭建NDK开发环境 Eclipse和Android[...]
Read More »

六月 11, 2015

Unity 5.0 中使用C/C++开发的dll插件使用中的问题 DllNotFoundException 问题集

Unity 中会经常用到C/C++开发的动态库(dll),Unity称为第三方插件,或plugin,这是非常厉害的扩展方法,但是Unity使用dll也非常痛苦,错误百出。 最常见的问题是 DllNotFoundException,就是找不到动态库。导致DllNotFoundException的原因很多,现把一些可能的情况,以及其解决方案一一列举: 1、DllNotFoundException:[...]
Read More »

十二月 25, 2014

Image not found when using dylib in xcode

Some errors like this: dyld: Library not loaded: /usr/local/lib/libXXX.dylib Referenced from: /sers/david/Projekte/Test/build/Debug/Test.app/Contents/MacOS/Test Reason:[...]
Read More »

十二月 15, 2014

Elapsed time in milliseconds in a C program

Use ‘gettimeofdata’ to do this job: #include <sys/time.h> #include <stdlib.h> #include <stdio.h> #include <math.h> /*[...]
Read More »

十二月 10, 2014

Returning Strings from a C++ API to C#

从C++的dll中返回字符串是一种经常用到的C#调用C++函数的方式,但是带有返回值的调用一直是说不清道不明的问题,不细细研究,的确没法用起来。 这里直接给出一个正确的做法,后面会提供一份Google出来的资料,讲的非常好。原理知道了,对于返回结构体也应该是可以按同理搞定的。   Code[...]
Read More »

五月 27, 2014

Capturing the Desktop Screen with the Mouse Cursor Image

下面的文章介绍了两种截屏方式及如何“截取”光标的方法。 通常情况下是无法截取光标的,因为光标不属于窗口中的windows元素,而是独立与窗口系统的另一层东西,叫Hot[...]
Read More »

五月 21, 2014

十大滤波算法程序大全(Arduino精编无错版)

最近用Arduino做电子秤,为了解决数据的跳变研究了不少滤波算法。网上能找到大把的十大滤波算法帖子,每一篇都不太一样,都号称精编啊,除错啊什么的,可是放到板子里却没一个能正常跑起来的。于是决定自己整理一下这些程序,完美移植到Arduino中。所以大家看到这个帖子的时候,不要怀疑我重复发帖。我的代码都是经过反复试验,复制到Arduino中就能开跑的成品代码,移植到自己的程序中非常方便。而且都仔细研究了各个算法,把错误都修正了的(别的程序连冒泡算法都是溢出的,不信自己找来细看看),所以也算个小原创吧,在别人基础上的原创。转载请注明出处:极客工坊  http://www.geek-workshop.com/thread-7694-1-1.htmlBy[...]
Read More »

五月 19, 2014

三种截取屏幕的方式

Various methods for capturing the screen By Gopalakrishna Palem, 19 Sep 2006 Download GDI source code – 72.1 Kb Download DirectX source code[...]
Read More »

五月 9, 2014

How can I return a string from a C dll to C#?

// c code: #include <ole2.h> /* needed for CoTaskMemAlloc */ EXPORT char* getUrlFromBaseURLInList(char *ListFilePath, char *SrchBaseURL, char*[...]
Read More »

八月 1, 2013

四元数与欧拉角之间的转换

在3D图形学中,最常用的旋转表示方法便是四元数和欧拉角,比起矩阵来具有节省存储空间和方便插值的优点。本文主要归纳了两种表达方式的转换,计算公式采用3D笛卡尔坐标系: 图1[...]
Read More »

七月 25, 2013

在C#中调试C++的DLL

“我的小伙伴们都惊呆了!” 今天才发现,其实C#是可以跟进C++代码的!!!在VS2012里的做法是: 在C#项目上右键点击,在右键菜单上选择“属性”[...]
Read More »

七月 21, 2013

四元数及其平滑处理

最近做camera 的 AI,需要对四元数,欧拉角等要有一定的了解,把前面学习的整理了一下: 1。四元数的优势  三维空间的旋转完全可以由4元数来胜任。传统意义上需要3×3矩阵来进行向量的旋转(4×4矩阵的第四列表示平移)。所以四元数更节省空间,运算速度更快。既然四元数能方便的表示3D旋转,那么对他们进行插值就能产生平滑的旋转效果。 劣势可能是比较抽象,不大好理解。而且据说顶点变换还是矩阵效率更高(涉及到平移)。 2。四元数的物理意义 Q([...]
Read More »

六月 1, 2013

临界区,互斥量,信号量,事件的区别

四种进程或线程同步互斥的控制方法 1、临界区:通过对多线程的串行化来访问公共资源或一段代码,速度快,适合控制数据访问。 2、互斥量:为协调共同对一个共享资源的单独访问而设计的。 3、信号量:为控制一个具有有限数量用户资源而设计。 4、事[...]
Read More »

五月 10, 2013

C++通过Callback向C#传递数据

现在比较流行C#与C++融合:C#做GUI,开发效率高,C++做运算,运行效率高,二者兼得。 但是C++与C#必然存在数据交互,C#与C++dll的数据交互从来都是一个让人头疼的问题。 从调用方式看也有两种情况: 1、C#调用C++函数 这种情况用的比较多,数据流向可以是C#流向C++,通过参数将数据传递给C++(如:SetData(double[][...]
Read More »

二月 22, 2013

C#调用C/C++动态库必须注意的几个问题

经常需要封装一些C/C++函数放入动态库中给C#程序调用,通常情况下直接写成如下形式即可: C#封装调用: [DllImport("depressor.dll")] private[...]
Read More »

六月 14, 2012

【转】Windows上调用Cygwin编译的函数库

2012-04-05 19:22 转载自 kaien_space 本篇介绍的是静态库函数。静态库扩展名是.lib(windows上)或.a(linux上),他和动态库(dll)是有区别的。 调用静态库编译后会写入执行程序中。然后就可以独立运行了。 动态库旨在动态调用,调用的时候需要加载dll才能正常工作。 (所以动态库往往可以提供补丁,或功能升级的时候使用,但是运行的速度有待商协) 另外,两个库的编译器也不一样,例如mingw用g++.exe生成动态库.dll,[...]
Read More »

六月 8, 2012

gdb的几个常用调试指令

本文为《GTK开发平台4.pdf》的gdb调试小节,摘于此处,以备后查。 • list :简记为 l ,其作用就是列出程序的源代码,默认每次显示10行。 •[...]
Read More »

Proudly powered by WordPress and Sweet Tech Theme