首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

ubuntu gcc编译’xxxx’未定义引用问题

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。

7.6K20

conan入门(十七):支持android NDK (armv7,armv8,x86,x86_64)交叉编译统一profile jinja2模板

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环境变量, 默认编译目标平台

1.4K40
您找到你想要的搜索结果了吗?
是的
没有找到

关于protobuf近期版本(v20v3.20+)和 gRPC v1.54版本在某些编译环境下一些链接和编译问题

这就意味着编译 protobuf 时候是可能被优化掉而没有这个符号。 但是使用者认为有这个符号,最终链接失败。...这个类析构在 MessageLite 这个类中被调用,在生成 .pb.cc 里是配有被直接调用。但是某些编译器会生成对它析构符号引用(可能也属于编译BUG)。...这时候又会导致符号未定义。 我们发现问题环境是编译iOS版本,具体编译器版本号忘记了,好像是AppleClang 12或者AppleClang 13。...所以当使用dll,需要把要导出符号设置为 __declspec(dllexport)/__attribute__((__dllexport__)), 导入时候设置为 __declspec((dllimport...有兴趣小伙伴也可以跟进。 gRPC 链接和编译问题 gRPC v1.54.0 链接符号问题 我们在使用高版本编译,会尽可能使用高版本STD标准。

82120

CMake搭建编译环境总结

使用CMake版本、工程名 ② 配置交叉工具:设置编译器、增加编译参数 ③ 包含需要嵌套子路径CMakeList Server路径 CMakeList ## 指定最低版本 ## 指定最低版本 cmake_minimum_required...在配交叉编译工具,此处应写对应交叉编译工具链绝对路径。...-Wformat 检查标准库函数使用格式是否正确,比如printf格式化字符串中格式符和对应参数是否匹配 -Wunused-function 已声明但是未定义静态函数和未被使用非内联静态函数发出警告...-Wswitch 当用switch用于枚举类型,判断分支是否包含所有枚举值,否则发出警告 -Wunused-variable 声明但未被使用变量发出警告 -Wunused-but-set-variable...当存在被设置但是未被使用参数发出警告,需配合-Wall -Wsign-compare 当比较有符号和无符号值发出警告 配置交叉编译环境常需要修改 设置默认库和头文件搜索路径 编译默认会从/usr

2.2K20

Windows下C++使用thread无法识别thread和mutex相关库解决

CLionC++编译器是正常,以前也跑过好几个项目,使用其他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及以上标准。

3.2K20

conan入门(五):conan 交叉编译引用第三方库示例

conan 交叉编译引用第三方库示例 Conan 是 C 和 C++ 语言依赖项和包管理器。...通过完整二进制包管理,它可以为任意数量不同版本包创建和重用任意数量不同二进制文件(用于不同配置,如架构、编译器版本等),在所有平台上使用完全相同过程。...在使用conan来管理C/C++包(制品库)环境下,如何实现交叉编译支持呢?因为我工作涉及不少嵌入式平台开发,conan交叉编译支持是我最关心部分。...本文还是以cJSON 为例 ,说明如何在交叉编译环境下使用Conan引入依赖库。 总得来说,很简单,只需要有工具链文件,就可以完成。...conan找不到arm平台库就会自动根据CONAN_CMAKE_TOOLCHAIN_FILE定义工具链接文件完成arm平台库编译 $ export CONAN_CMAKE_TOOLCHAIN_FILE

1.4K30

Android NDK cmake编译方式(六)

什么是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下载链接]

2.3K61

在ClionIDE中指定命令行参数

最近在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

4K60

深入理解使用CMake编译 NDK 程序

那么使用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进行交叉编译。 ----

3.7K30

Xmake v2.7.2 发布,更加智能化构建第三方库

我们能够使用它像 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 生成

87620

CMake---优雅构建CC++软件项目实践(1)

当我们将一些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 这样就实现了交叉编译,你也可以配置其他交叉编译工具链。

8.1K52

Android NDK开发扫盲及最新CMake编译使用

比如指定使用c++11还是c++14编译,会引用哪些共享库,并描述关系等,还会指定编译 abi。只有有了这些 NDK 中编译工具才能准确编译 c/c++ 代码。...但是当我们开发或者使用原生代码就需要了解不同 ABI 以及为自己程序选择接入不同 ABI 库。...建议结合 CMake 官方文档使用。...同时在这推荐一个中文翻译简易CMake手册 2.2 CMake 使用自己及其他预建库 当你需要引入已有的静态库/动态库(FFMpeg)或者自己编译核心部分并提供出去就需要考虑如何在 CMake...(其实官方文档中大部分都是的,并没有使用 CMake) 幸运是, Github上官方示例 里面有个项目 hello-libs 实现了如何创建出静态库/动态库,并引用它。

2.1K30

cmake-conan 2.0 接入指南

本文主要介绍 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 厂商思考如何捆绑用户到自己业务中,而他们却解除耦合使用真正工具价值在吸引用户,也许这就是开源项目的魅力所在吧

1.1K10

cmake链接静态库-static-libstdc++问题

在嵌入式平台中,业务使用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++即可,添加如下一行就可以正常链接成功

5.8K51

如何 Neuron 源码进行交叉编译

交叉编译需要用到交叉编译链。交叉编译链是为了编译跨平台体系结构程序代码而形成由多个子工具构成一套完整工具集。当指定了源文件(.c),它会自动按照编译流程调用不同子工具,自动生成可执行文件。...交叉编译重点在于交叉编译器,使用不同平台编译器用来生成可在该平台运行可执行程序。所有语句都写在跨平台编译工具 CMake 所依赖规则文件 CMakeLists.txt 中,用于构建整个工程。...Neuron 交叉编译流程下面我们以 X86_64 架构平台下编译出可运行于 armv7l 架构可执行程序为例,介绍 Neuron 源码进行交叉编译具体操作。...,用户需要先交叉编译使用依赖库进行交叉编译,使得依赖库与交叉编译平台保持一致。...执行指令使用编译工具,即上述中安装相应编译器。

1.1K50

Ubuntu 14.04 LTS下使用arm-linux-gcc交叉编译OpenCV 2.4.9

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 左边那个符号。

9.2K90

Android NDK开发完全剖析

做过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 和工作区。

1.7K10

Cmake在windows支持预编译头文件(stdafx.h)

不够经过这段时间系统研究,觉得cmake还是非常强大,吃透之后它的确非常方便,比手工写makefile要简单多,因此在linux使用cmake我觉得是非常合适,不过在windows则相对要差一些...本文主要讲下在windows下使用cmake给项目添加预编译头文件功能,做过windows项目的同学都知道,windows下使用编译头文件非常普遍,能加快编译速度,一些头文件交叉引用问题也能使用它来解决...,但是cmake这块支持不是很完善,资料也很少,我在网上查询了很久,才找到一个合适方案,下面就详细讲下这个方案。      ...编写好这个文件之后,我们以后写cmake文件时候可以可以直接引用它了。...定义宏 USE_MSVC_PCH(Proxy stdafx.h ${STDAFX_PCH_C}) endif ()       好了,使用上面的方法就可以给vs工程添加预编译头文件支持了。

1.7K31

Cmake在windows支持预编译头文件(stdafx.h)

不够经过这段时间系统研究,觉得cmake还是非常强大,吃透之后它的确非常方便,比手工写makefile要简单多,因此在linux使用cmake我觉得是非常合适,不过在windows则相对要差一些...本文主要讲下在windows下使用cmake给项目添加预编译头文件功能,做过windows项目的同学都知道,windows下使用编译头文件非常普遍,能加快编译速度,一些头文件交叉引用问题也能使用它来解决...,但是cmake这块支持不是很完善,资料也很少,我在网上查询了很久,才找到一个合适方案,下面就详细讲下这个方案。      ...为了复用预编译这个功能,我们把预编译相关cmake功能编写成一个文件,比如叫msvcpch.cmake。...编写好这个文件之后,我们以后写cmake文件时候可以可以直接引用它了。

2.6K50
领券