今天公司的小伙伴遇到一个问题,这里做一个记录. 问题是这样的,他编译了公司的基础库,然后在程序中链接的时候遇到点问题,报错找不到定义. 用到的函数声明大概是这样的: void function(const std::string& in,int* out); 编译的时候显示找不到定义,报错大概是这样的: 'function(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char…
一般编译链接c++程序最好使用g++,若有如上的报错信息,需要在gcc后加上 -lstdc++ eg: gcc test.c -lstdc++ gcc和g++都是GNU的一个编译器. g++:后缀.c的程序和.cpp的程序都会当成是c++的源程序来处理. gcc:会把.c的程序处理成c程序. 对于.cpp的程序,编译可以用gcc/g++,链接可以用g++或者gcc -lstdc++.…
除非明确说明,本文内容仅针对x86/x86_64的Linux开发环境,有朋友说baidu不到,开个贴记录一下(加粗字体是关键词): 用“-Wl,-Bstatic”指定链接静态库,使用“-Wl,-Bdynamic”指定链接共享库,使用示例:-Wl,-Bstatic -lmysqlclient_r -lssl -lcrypto -Wl,-Bdynamic -lrt -Wl,-Bdynamic -pthread -Wl,-Bstatic -lgtest("-Wl"表示是传递给链接器ld的参数…
我在编译ligra是遇到了这个问题,网上搜了一遍,发现是了原因https://gcc.gnu.org/onlinedocs/libstdc%2B%2B/manual/using_dual_abi.html gcc5.4中C++11对一些变量的解析不太一样(表达不太好),比如,f std::list<int>被定义为了std::__cxx11::list<int>,所以会出现未定义引用的错误,. 解决办法禁用C++11的相关特性,方法如下:https://blog.csdn.net/…
编译链接过程 代码 #cat main.c #include <stdio.h> int add(int x, int y); int sub(int x, int y); int mul(int x, int y); int div(int x, int y); int main(void) { printf("add:%d\n", add(1,2)); printf("sub:%d\n", sub(10,100)); printf("mul…
静态库 有时候需要把一组代码编译成一个库,这个库在很多项目中都要用到,例如libc就是这样一个库, 我们在不同的程序中都会用到libc中的库函数(例如printf),也会用到libc中的变量(例如以后 要讲到的environ变量).本文将介绍怎么创建这样一个库. 这些文件的目录结构是: $ tree . |-- main.c `-- stack |-- is_empty.c |-- pop.c |-- push.c |-- stack.c `-- stack.h 1 directory, 6 f…
本人原创文章,文章是在此代码github/note的基础上进行补充,转载请注明出处:https://github.com/dramalife/note. 以librt丶用户自定义动态库libxxx 和 用户应用程序app为例,讨论编译链接过程中出现的错误, 其中app依赖libxxx,libxxx依赖librt. 关键词:" undefined reference to". 1 源文件 1.1 app.c /* * [note](github.com/dramalife/note.gi…
PATH ----  可执行程序寻找路径 C_INCLUDE_PATH  ---- 头文件寻找路径 CPLUS_INCLUDE_PATH  --- g++ 头文件路径 LD_LIBRARY_PATH  --- ldd 连接器寻找动态库路径 LIBRARY_PATH  --- 静态连接器寻找静态库路径 PKG_CONFIG_PATH --- pkgconfig 查找目标生成依赖和链接信息的 xx.pc 文件的路径…
CXX/LD -o .build_release/tools/test_net.binCXX/LD -o .build_release/tools/convert_annoset.binCXX/LD -o .build_release/tools/device_query.binCXX/LD -o .build_release/tools/extract_features.binCXX/LD -o .build_release/tools/get_image_size.binCXX/LD -o…
太长不看版:GCC4和GCC5使用的C++标准库下,string的名字不一样,导致链接错误. 之前在Ubuntu下使用OpenCV的时候一切正常.后来再次编译的时候,连接器提示有些库函数找不到: main.o:在函数'main'中: main.cpp:15:对'cv::imread(std::string const&, int)'未定义的引用 main.cpp:22:对'cv::namedWindow(std::string const&, int)'未定义的引用 main.cpp:23…
最近解决一个动态链接上的问题,因为以前从来没有接触过这方面的知识,所以恶补了一下,首先要了解gcc编译指令(makefile),ld链接器的选项(还有连接脚本section指定内存位置),熟悉查看连接状态是否成功的指令工具(其中又有elf格式,ld.elf相关指令).然后反汇编理解动态链接的实际执行过程,总的说来这里面的东西还真很多,主要是网上比较深入资料很少,大部分博文也是一知半解,所以后续有问题应直接阅读标准文档.<程序员的自我修养----链接.装载与库>这本书详细介绍了一个应用程序在编译…
GCC是GUN Compiler Collection的简称,除编译程序外,还包含其他相关工具.GCC可将高级语言编写的源代码构建成计算机直接执行的二进制代码.GCC是Linux平台下最常用的编译程序,也是Linux平台编译器的事实标准.GCC支持四十余种不同目标体系结构(如X86系列.ARM及PowerPC等),可运行在不同的操作系统上(如Linux.Solaris及Windows等).GCC既支持基于宿主的开发(即在A平台上编译该平台使用的程序),也支持交叉编译(即在A平台上编译供B平台使用…
用GCC编译代码时候后面带有-std=c++1z 的选项,这是指定c/c++的标准.具体的标准如下,详细信息可以看引用里面的详细说明…
问题: t->package().ship_id(sqlRow[1]);其中 ship_id为 结构体package中的string类型.如下: typedef struct Package{    string ship_id;    ....}Package_t; 给ship_id赋值时报错: no match for call to ‘(std::__cxx11::string {aka std::__cxx11::basic_string 参考答案: https://stackoverf…
注意OpenCV 4.0.1 解决了这个问题请直接下载OpenCV 4.0.1 但是OpenCV 4.0.1作为模块导入Android Studio会有找不到R.styleable的问题 OpenCV 4.0.1 找不到R.styleable解决 OpenCV4Android支持三种使用方式 1.Java层调用2.NDK调用动态库(方便,但是会包含整个.so库)3.NDK调用静态库(灵活,比如没有用到机器学习模块,libopencv_ml.a里的代码是不会打包到动态库里的)通过链接静态库的方式使…
一.编译方式的示例详解 1. 编译C代码 代码如下:main.c /*!  ******************************************************************************  * \File  *   main.c  * \Brief  *   C codes  * \Author  *   Hank  *******************************************************************…
作者:zzandyc来源:CSDN原文:https ://blog.csdn.net/zzandyc/article/details/77540056 版权声明:本文为博主原创文章,转载请附上博文链接! std::string ws2s(const std::wstring &ws) { size_t i; std::string curLocale = setlocale(LC_ALL, NULL); setlocale(LC_ALL, "chs"); const wchar…
807down vote string? wstring? std::string is a basic_string templated on a char, and std::wstring on a wchar_t. char vs. wchar_t char is supposed to hold a character, usually a 1-byte character. wchar_t is supposed to hold a wide character, and then,…
1:gcc编译的四个阶段:预处理,编译,汇编,链接 #vi file.c #gcc -E file.c -o file.i//-E查看且预处理后停止编译,-o生成目标文件,-i表示已预处理 #gcc -S file.i -o file.s//-S编译到汇编而不进行汇编和链接 #gcc -c file.s -o file.o//-c编译到目标代码 #gcc file.o -o file//-o 文件输出到文件 # gcc -static file.c -o file//-static禁止使用动态库…
在gcc编译器环境下,常见的文件扩展名的含义如下: .c:C源程序,经过预编译后的源程序也为.c文件,它可以通过-E参数输出. .h:头文件 .s:经过编译得到的汇编程序代码,它可以通过-S参数输出. .o:目标文件 .a:函数库 Gcc编译器常见语法: -c:只进行编译,不进行链接,输出的是与源文件同名的.o文件. -o:指定生成的文件的名称.链接生成可执行文件,这个参数后可以带可执行文件的名字,如果没有指定可执行文件的名字,则会默认为a.out. -S:输出汇编代码文件,输出一个与源文件同名…
gcc编译时,如果需要链接的库的目录不在标准目录,则需要通过将保护库的目录/aa/bb/cc通过-L/aa/bb/cc 添加到搜索路径中,如: gcc -o xmltest xml_test.cpp -L/home/xxxx/Desktop/xml_test -lmxml -lpthread -static ps:-static是指使用静态链接,这样就不需要将so放到目标运行环境,但是生成的文件会变大.…
1.现在对两个文件生成可执行文件 //thanks.c #include <stdio.h> int main(void) { printf("Hello World\n"); thanks_2(); } //thanks_2.c #include <stdio.h> int thanks_2(void) { printf("Hello World2\n"); ); } 2.步骤 一.cd 到文件所在目录 二.gcc -c 编译 三.gcc…
1. 库的介绍 库是写好的现有的,成熟的,可以复用的代码.现实中每个程序都要依赖很多基础的底层库,不可能每个人的代码都从零开始,因此库的存在意义非同寻常. 本质上来说库是一种可执行代码的二进制形式,可以被操作系统载入内存执行.库有两种:静态库(.a..lib)和动态库(.so..dll). windows上对应的是.lib .dll linux上对应的是.a .so 在这里先介绍下Linux下的gcc编译的几个选项 g++ -c hellospeak.cpp 会将hellospeak.cpp 选…
//宽字符转多字节 std::string W2A(const std::wstring& utf8) { int buffSize = WideCharToMultiByte(CP_ACP, NULL, utf8.c_str(), -1, NULL, NULL, NULL, FALSE); char *gbk = new char[buffSize+1]; memset(gbk, 0, buffSize + 1); WideCharToMultiByte(CP_ACP, NULL, utf8.…
gcc/g++链接时对库的顺序要求 -Ldir Add directory dir to the list of directories to be searched for -l. -llibrary -l library Search the library named library when linking. (The second alternative with the library as a separate argument is only for POSIX complian…
I need to convert between UTF-8, UTF-16 and UTF-32 for different API's/modules and since I know have the option to use C++11 am looking at the new string types. It looks like I can use string, u16string and u32string for UTF-8, UTF-16 and UTF-32. I a…
来自http://blog.csdn.net/benpaobagzb/article/details/51364005 GCC 编译使用动态链接库和静态链接库 1 库的分类 根据链接时期的不同,库又有静态库和动态库之分. 静态库是在链接阶段被链接的(好像是废话,但事实就是这样),所以生成的可执行文件就不受库的影响了,即使库被删除了,程序依然可以成功运行. 有别于静态库,动态库的链接是在程序执行的时候被链接的.所以,即使程序编译完,库仍须保留在系统上,以供程序运行时调用.(TODO:链接动态库时链…
std::string转为 std::wstring std::wstring UTF8_To_UTF16(const std::string& source) { unsigned long len = ::MultiByteToWideChar(CP_UTF8, NULL, source.c_str(), -1, NULL, NULL); //::表示全局函数 不加:: 默认先调用类中的同名函数 if(len == 0) return std::wstring(); wchar_t *buf…
拿一个苹果系统下的c文件为例: testArr.c #include <stdio.h> int main() { , , , , }; printf(]); } 当我们编译的时候  一般使用 gcc testArray.c 编译出来一个名为a.out的可执行文件,但是文件中我们引入 了<stdio.h>,为什么不需要显示的用gcc去链接这个库文件呢?原来当用gcc编译的时候会调用ld去链接库 文件,先把testArray.c编译成一个目标文件,再用ld命令去链接,看看发生了生么.…
string.vector 互转 string 转 vector vector  vcBuf;string        stBuf("Hello DaMao!!!");----------------------------------------------vcBuf.resize(stBuf.size());vcBuf.assign(stBuf.begin(), stBuf.end()); vector 转 string  stBuf.clear();stBuf.assign(v…