http://www.cnblogs.com/oloroso/p/4688426.html gcc编译时对’xxxx’未定义的引用问题 原因 解决办法 gcc 依赖顺序问题 在使用gcc编译的时候有时候会碰到这样的问题...dso.o:在函数‘dso_load(char const*, char const*)’中: dso.cpp:(.text+0x3c):对‘dlopen’未定义的引用 dso.cpp:(.text+0x4c...):对‘dlsym’未定义的引用 dso.cpp:(.text+0xb5):对‘dlerror’未定义的引用 dso.cpp:(.text+0x13e):对‘dlclose’未定义的引用 原因 出现这种情况的原因...比如上面的例子,是因为缺失了dlopen、dlsym、dlerror、dlclose这些函数的实现,这几个函数是用于加载动态链接库的,编译的时候需要添加-ldl来使用dl库(这是静态库,在系统目录下/usr...例如:在main.c中使用了pthread库相关函数,那么编译的时候必须是main.c在前,-lpthread在后。gcc main.c -lpthread -o a.out。
conan:支持android NDK (armv7,armv8,x86,x86_64)交叉编译的统一profile jinja2模板 上一篇博客《conan入门(十六):profile template...功能实现不同平台下profile的统一》以Android NDK交叉编译为例介绍了jinja模板在conan profile中的应用。...本文在此基础上,更进一步改进将android NDK 对不同平台armv7,armv8,x86,x86_64交叉编译的profile基本于同一个模板统一实现 android_clang.jinja 如下是基于...api_level定义来确定目标平台,未定义则根据不同的平台有不同的默认值. android.toolchain.cmake ANDROID NDK默认提供的工具链文件$ANDROID_NDK/build.../cmake/android.toolchain.cmake, 如果不指定ANDROID_ABI和 ANDROID_NATIVE_API_LEVEL或ANDROID_PLATFORM环境变量, 默认编译的目标平台
这就意味着编译 protobuf 的时候是可能被优化掉而没有这个符号的。 但是使用者认为有这个符号,最终链接失败。...这个类的析构在 MessageLite 这个类中被调用,在生成的 .pb.cc 里是配有被直接调用的。但是某些编译器会生成对它的析构符号的引用(可能也属于编译器的BUG)。...这时候又会导致符号未定义。 我们发现问题的环境是编译iOS版本时,具体编译器版本号忘记了,好像是AppleClang 12或者AppleClang 13。...所以当使用dll时,需要把要导出的符号设置为 __declspec(dllexport)/__attribute__((__dllexport__)), 导入的时候设置为 __declspec((dllimport...有兴趣的小伙伴也可以跟进。 gRPC 的链接和编译问题 gRPC 的 v1.54.0 的链接符号问题 我们在使用高版本编译器时,会尽可能使用高版本的STD标准。
:使用CMake版本、工程名 ② 配置交叉工具:设置编译器、增加编译参数 ③ 包含需要嵌套的子路径CMakeList Server路径 CMakeList ## 指定最低版本 ## 指定最低版本 cmake_minimum_required...在配交叉编译工具时,此处应写对应交叉编译工具链的绝对路径。...-Wformat 检查标准库函数的使用格式是否正确,比如printf的格式化字符串中的格式符和对应的参数是否匹配 -Wunused-function 对已声明但是未定义的静态函数和未被使用的非内联静态函数发出警告...-Wswitch 当用switch用于枚举类型时,判断分支是否包含所有枚举值,否则发出警告 -Wunused-variable 对声明但未被使用的变量发出警告 -Wunused-but-set-variable...当存在被设置但是未被使用的参数发出警告,需配合-Wall -Wsign-compare 当比较有符号和无符号值时发出警告 配置交叉编译环境常需要的修改 设置默认库和头文件搜索路径 编译默认会从/usr
/configure进行编译配置方式已经被取消,取而代之的是cmake工具,所以,首先要在系统中安装cmake工具。...ha_partition::ha_partition(handlerton*, partition_info*)’未定义的引用 /usr/local/src/mysql-5.6.35/sql/handler.cc...:462:对‘ha_partition::initialize_partition(st_mem_root*)’未定义的引用 ../../.....ha_partition::truncate_partition(Alter_info*, bool*)’未定义的引用 collect2: 错误:ld 返回 1 make[2]: *** [storage.../usr/local/mysql/my.cnf,但是呢系统中自带一个默认配置文件/etc/my.cnf,如果要使用新的配置文件,那么需要将/etc/my.cnf删除。
CLion的C++编译器是正常的,以前也跑过好几个项目,使用其他STL库函数也正常,唯独使用thread时报无法识别的错,所有thread都划上了红线。如下图所示: ?...(fix available) 问题解决过程 因为thread和mutex是C++11才引入的,所以一开始考虑的是不是CMakeList上没有加编译选项,于是加上 set(CMAKE_CXX_FLAGS...后来受到博客CLion安装mingw并配置以支持c++11多线程编程的启发,重新安装mingw编译器,但是不成功。...又看到博客mingw-w64安装支持c++11中thread(windows下)的操作,发现关键是在安装mingw时需要将Thread选项设为posix。重新安装mingw解决问题。 ?...总结 不能使用thread是因为mingw的编译器不支持thread,需要重新安装mingw,安装方法在引用的两篇博客里都有。同时需要确保建立工程时使用的是C++11及以上标准。
conan 交叉编译引用第三方库示例 Conan 是 C 和 C++ 语言的依赖项和包管理器。...通过完整的二进制包管理,它可以为任意数量的不同版本的包创建和重用任意数量的不同二进制文件(用于不同的配置,如架构、编译器版本等),在所有平台上使用完全相同的过程。...在使用conan来管理C/C++包(制品库)的环境下,如何实现对交叉编译的支持呢?因为我的工作涉及不少嵌入式平台的开发,conan对交叉编译的支持是我最关心的部分。...本文还是以cJSON 为例 ,说明如何在交叉编译环境下使用Conan引入依赖库。 总得来说,很简单,只需要有工具链文件,就可以完成。...时conan找不到arm平台的库就会自动根据CONAN_CMAKE_TOOLCHAIN_FILE定义的工具链接文件完成arm平台库的编译 $ export CONAN_CMAKE_TOOLCHAIN_FILE
什么是CMake CMake是一种跨平台编译工具,比make更为高级,使用起来要方便得多。...使用方式为set(var value force). 其中定义时必须填写的参数为:var 和 value。...中build我们的NDK工程时,Aandroid Studio会通过上面的步骤为我们设置好交叉编译环境,然后再将CMakelists.txt文件传给 CMake, CMake解析里面的内容,并最终调用不同平台的工具...总结 通过前文的介绍,主要了解 Android Studio 在开发 NDK 程序时,是怎样使用 CMake Gradle plugin 配置交叉编译环境的,同时了解了 CMake 编译 NDK 程序的基本流程...希望对大家理解最新的 Andriod Studio 是如何使用 CMake进行交叉编译的有所帮助。 [Github Demo下载链接]
最近在linux上使用Clion这个C++ IDE,感觉很好,JetBrain的产品都很不错。...’未定义的引用 就是说头文件的函数原型已经找到了,但是函数实现还没有找到,需要动态链接到pthread库上,然后就试着去run里面的edit_configure里面的cmdline parameter中手动添加...后来发现在project目录下有个CmakeList文件,原来使用的是CMake编译器,所以应该在CMakeList文件中来指定命令行参数 比如: cmake_minimum_required(VERSION...一般编译命令指定动态库时,程序会在系统默认的动态库路径去寻找,如果动态库不在指定路径上,需要手动指定路径 通常是 -L /usr/local/lib -pthread这样先指定路径,后指定库 但是在CMakeList...中可以将二者分开,路径在link_directories("/usr/local/lib")中指定好 在编译命令参数中直接使用相应的库即可,比如: cmake_minimum_required(VERSION
那么使用CMake编译NDK程序是否与我们之前介绍的使用ndk-build编译有很大的不同呢?下面我们就来一窥它的原理。...虽然名字中含有"make",但是CMake和Unix上常见的“make”系统是分开的,而且更为高级 Android Studio 如何使用 CMake 其实通过 CMake 进行 NDK 交叉编译的方式与我们之前介绍的两种方式的原理是相同的...CMake NDK 编译过程 当我们在Android Studio中build我们的NDK工程时,AS会通过上面的步骤为我们设置好交叉编译环境,然后再将CMakelists.txt文件传给 CMake,...小结 通过上面的分析,我们知道了 Android Studio 在开发 NDK 程序时,是如何使用 CMake Gradle plugin 设置交叉编译环境的,也基本了解了 CMake 编译 NDK 程序的基本流程...希望本篇文章可以帮助大家理解最新的 Andriod Studio 是如何使用 CMake进行交叉编译的。 ----
我们能够使用它像 Make/Ninja 那样可以直接编译项目,也可以像 CMake/Meson 那样生成工程文件,另外它还有内置的包管理系统来帮助用户解决 C/C++ 依赖库的集成使用问题。...TryBuild 模式,可以在没有 xmake.lua 的情况下,使用 Xmake 尝试对 autoconf/cmake/meson 等维护的第三方项目进行直接构建。...其实,也就是让 Xmake 检测到对应的构建系统后,调用 cmake 等命令来实现,但是会帮助用户简化配置操作,另外还能对接 xmake 的交叉编译工具链配置。...对接交叉编译工具链 这种智能构建模式,我们不仅能够编译本机程序,还可以对接交叉编译工具链,实现对 ios/android 以及任意交叉编译平台的支持。...#2809: 改进 msvc 的编译优化选项 改进 trybuild 模式,为 meson/autoconf/cmake 提供更好的交叉编译支持 #2846: 改进对 configfiles 的生成
当我们将一些lib安装在非默认搜索路径时,cmake就没法搜索到了,可设置: SET(CMAKE_INCLUDE_PATH "include_path") // find_path,查找头文件 SET(...4.5 功能模块添加 4.5.1 功能模块编译 比如我们要添加一个日志模块,实现对spdlog项目的一个二次封装,更好的在自己的项目中使用,那么我们建立src/logger目录,里面新建logger.hpp...4.7 交叉编译配置 CMake给我们提供了交叉编译的变量设置,即CMAKE_TOOLCHAIN_FILE这个变量,只要我们指定交叉编译的cmake配置文件,那么cmake会导入该配置文件的中编译器配置...我们设计的交叉编译工具链配置文件存放目录在platforms/下,这里我们使用华为海思的一个编译工具,我们按类别命名,创建一个工具栏cmake配置文件platforms/linux/arm.himix200.../platforms/linux/arm.himix200.cmake $ make -j 这样就实现了交叉编译,你也可以配置其他的交叉编译工具链。
比如指定使用c++11还是c++14编译,会引用哪些共享库,并描述关系等,还会指定编译的 abi。只有有了这些 NDK 中的编译工具才能准确的编译 c/c++ 代码。...但是当我们开发或者使用原生代码时就需要了解不同 ABI 以及为自己的程序选择接入不同 ABI 的库。...建议结合 CMake 的官方文档使用。...同时在这推荐一个中文翻译的简易的CMake手册 2.2 CMake 使用自己及其他预建的库 当你需要引入已有的静态库/动态库(FFMpeg)或者自己编译核心部分并提供出去时就需要考虑如何在 CMake...(其实官方文档中大部分都是的,并没有使用 CMake) 幸运的是, Github上的官方示例 里面有个项目 hello-libs 实现了如何创建出静态库/动态库,并引用它。
本文主要介绍 cmake-conan 的应用场景以及交叉编译的实战。...交叉编译 历史版本的交叉编译需要我们先写好本机和目标系统的 profile 文件然后传递给 Conan 让 Conan 做出抉择,而 cmake-conan v2 版本中,你只需要关注 CMake 脚本...,没有 Conan 时你是怎么交叉编译的,那么使用 cmake-conan 时你只需要创建一个 conanfile.txt 或 conanfile.py,并在 CMake 初始化时多增加一个 CMAKE_PROJECT_TOP_LEVEL_INCLUDES...其他平台的交叉编译也是一样如法炮制。...Creator 图片 CLion 总结 新版本的 cmake-conan 设计符合业界设计规则,当大部分 PaaS 厂商思考如何捆绑用户到自己业务中时,而他们却解除耦合使用真正的工具价值在吸引用户,也许这就是开源项目的魅力所在吧
在嵌入式平台中,业务使用C语言开发,在交叉编译过程中会链接一个第三方的c++静态库,该第三放库使用了std,需要链接libstdc++的库,由于所在的嵌入式平台中没有libstdc++.so库,如果将libstdc...++.so拷贝板子上,需要占用5MB空间,很浪费空间,准备使用libstdc++的静态库,在链接过程中出现如下问题; 整个业务的编译使用cmake构建,使用如下方式进行链接; add_executable...'libstdc++'的库,在cmake中有链接-static-libstdc++,而且交叉工具链中是有libstdc++.a库,当我们将cmake改为: add_executable(${target...'lstdc++'是gcc和g++都能识别,但是'-static-libstdc++'只有g++可以识别,而我的业务代码都是使用C语言编写的,在链接时cmake默认使用的是gcc,但是gcc不能识别'-...static-libstdc++',最终不会链接到实际的libstdc++.a,所以在链接时出现不能识别std的问题; 知道原因了,就很好解决了,在链接阶段将cmake的链接选项改为g++即可,添加如下一行就可以正常链接成功
交叉编译需要用到交叉编译链。交叉编译链是为了编译跨平台体系结构的程序代码而形成的由多个子工具构成的一套完整的工具集。当指定了源文件(.c)时,它会自动按照编译流程调用不同的子工具,自动生成可执行文件。...交叉编译链的重点在于交叉编译器,使用不同平台的编译器用来生成可在该平台运行的可执行程序。所有语句都写在跨平台编译工具 CMake 所依赖的规则文件 CMakeLists.txt 中,用于构建整个工程。...Neuron 的交叉编译流程下面我们以 X86_64 架构平台下编译出可运行于 armv7l 架构的可执行程序为例,介绍对 Neuron 源码进行交叉编译的具体操作。...,用户需要先对在交叉编译中使用的依赖库进行交叉编译,使得依赖库与交叉编译的平台保持一致。...执行指令时所使用的编译工具,即上述中安装的相应的编译器。
Ubuntu 14.04 LTS下使用arm-linux-gcc交叉编译OpenCV 2.4.9 当前两个手头有两个项目都是都需要在ARM板中使用OpenCV,所以交叉编译必不可少。...三、安装依赖库 OpenCV交叉编译之前,首先需要对依赖库进行交叉编译。因为OpenCV依赖于很多库函数,如果在编译OpenCV之前没有编译依赖项,就会导致编译后的OpenCV无法使用。...OpenCV交叉编译时各个库的依赖关系如下所示: OpenCV zlib jpeg libpng zlib tiff zlib ffmpeg x264 xvidcore 笔者使用的依赖库如下所示...四、OpenCV的交叉编译 1、获取OpenCV源码 笔者这里使用的是OpenCV 2.4.9版本,可以在官网上下载。...以后编译arm板的OpenCV代码时,要使用上面的编译指令。其中` 符号不是逗号,而是1 左边的那个符号。
做过jni开发的同学都知道jni代码是使用ndk工具链编译的,ndk工具中就包含交叉编译工具链,我们先看一下ndk的目录结构: 这些目录表示针对不同CPU架构的编译工具链,例如arm-linux-androideabi...交叉编译有一个完整的过程: 从交叉编译的过程来看,其实和正常的编译没什么不一样,只不过有两点: 交叉编译使用的是交叉编译工具 交叉编译链接的库或者头文件必须明确指定 例如我们使用gcc编译的过程,有一些库函数已经指定在系统的...下面通过一个例子来加深对交叉编译的理解:一个很简单的c程序 #include int main(int argc, char** argv) { printf("Hello,...CMake编译 如果大家在Android5.0做过NDK编程的话,当时是使用ndk-build工具进行编译的,还需要配置Android.mk和Application.mk。...CMake用于使用简单的平台和编译器独立配置文件来控制软件编译过程,并生成可在您选择的编译器环境中使用的本机 makefile 和工作区。
不够经过这段时间系统的研究,觉得cmake还是非常强大的,吃透之后它的确非常方便,比手工写makefile要简单的多,因此在linux使用cmake我觉得是非常合适的,不过在windows则相对要差一些...本文主要讲下在windows下使用cmake给项目添加预编译头文件功能,做过windows项目的同学都知道,windows下使用预编译头文件非常普遍,能加快编译速度,一些头文件交叉引用问题也能使用它来解决...,但是cmake对这块支持不是很完善,资料也很少,我在网上查询了很久,才找到一个合适的方案,下面就详细讲下这个方案。 ...编写好这个文件之后,我们以后写cmake文件的时候可以可以直接引用它了。...定义的宏 USE_MSVC_PCH(Proxy stdafx.h ${STDAFX_PCH_C}) endif () 好了,使用上面的方法就可以给vs的工程添加预编译头文件的支持了。
不够经过这段时间系统的研究,觉得cmake还是非常强大的,吃透之后它的确非常方便,比手工写makefile要简单的多,因此在linux使用cmake我觉得是非常合适的,不过在windows则相对要差一些...本文主要讲下在windows下使用cmake给项目添加预编译头文件功能,做过windows项目的同学都知道,windows下使用预编译头文件非常普遍,能加快编译速度,一些头文件交叉引用问题也能使用它来解决...,但是cmake对这块支持不是很完善,资料也很少,我在网上查询了很久,才找到一个合适的方案,下面就详细讲下这个方案。 ...为了复用预编译这个功能,我们把预编译相关的cmake功能编写成一个文件,比如叫msvcpch.cmake。...编写好这个文件之后,我们以后写cmake文件的时候可以可以直接引用它了。
领取专属 10元无门槛券
手把手带您无忧上云