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

C++调用C链接出现问题

以下是假设旧C程序 C头文件 /*-----------c.h--------------*/ #ifndef _C_H_ #define _C_H_ extern int add(int x,...obj文件实际命名为_add,而c++命名则不同,为了实现函数重载同样函数名add因参数不同会被编译成不同名字 例如 int add(int , int)==>add@@YAHHH@Z, float...@@YAHHH@Z[/email],可惜他找不到,因为C源文件把extern int add(int x, int y);编译成_add了; 为了解决这个问题C++采用了extern "C",这就是我们主题...@Z[/email]; 这也就为什么DLL中常看见extern "C" {},windows是采用C语言编制他首先要考虑到C可以正确调用这些DLL,而用户可能会使用C++而extern "C" {}就会发生作用...当原来C语言写头文件里面没有考虑这个问题时候,可以写成这样: #include #include extern "C" { #include "sift.h

1.1K30

问题解决丨关于使用Brian2出现Microsoft Visual C++ 14.0 or greater is required.问题

CSDN@AXYZdong,CSDN首发,AXYZdong原创 唯一博客更新地址为: AXYZdong博客 B站主页为:AXYZdong个人主页 文章目录 问题来源 1 查看已经安装 Microsoft...Visual C++ 版本 2 安装 Microsoft Visual C++ 14.0 或者更高版本 问题来源 在运行含有 Brian2 包Python程序,显示以下两部分 Error: ERROR...Get it with "Microsoft C++ Build Tools": https://visualstudio.microsoft.com/visual-cpp-build-tools/ 结合百度相关问题解决方法以及安装报错提示...1 查看已经安装 Microsoft Visual C++ 版本 1、搜索控制面板,进入控制面板。 2、找到程序并点击 卸载程序。...3、在卸载程序页面右上角搜索 Microsoft Visual C++,查看已经安装版本。

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

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.6K51

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

问题描述 今天我在Windows下打算尝试C++多线程编程,在CLion上进行编码。...CLionC++编译器是正常,以前也跑过好几个项目,使用其他STL库函数也正常,唯独使用thread时报无法识别的错,所有thread都划上了红线。如下图所示: ?...(fix available) 问题解决过程 因为thread和mutex是C++11才引入,所以一开始考虑是不是CMakeList上没有加编译选项,于是加上 set(CMAKE_CXX_FLAGS...又看到博客mingw-w64安装支持c++11中thread(windows下)操作,发现关键是在安装mingw需要将Thread选项设为posix。重新安装mingw解决问题。 ?...同时需要确保建立工程使用C++11及以上标准。

3.2K20

披着CLion外衣实则在讲CMake

工具配置 这个配置是进行 C++ 开发关键,因为这个编译工具就意味着 C++ 编译环境。...接下来简单介绍如何添加一些工具: 安装 msvc 编译工具:直接到官网下载 VS2022,然后安装对应 C++ 环境,打开 CLion 后添加 msvc 环境就会自动识别。...CMake 使用与实战 经过上述文字和图片讲解,我们很自然想到,整个 CLion 运行 C++ 代码其实就是在运行 cmake 和 makefile(或 build.ninja),第二个过程我们参与不了...指定 C++ 语言标准版本 CMAKE_CXX_FLAGS :指定编译 C++ 代码使用编译选项 CMAKE_C_FLAGS :指定编译 C 代码使用编译选项 CMAKE_EXE_LINKER_FLAGS...(如 x86、x86_64 等) CMAKE_CXX_COMPILER_ID :指定了当前使用 C++ 编译器,同理可得 C 编译器对应名字。

4.2K30

当我们自己写了一个C++动态,给C#调用出现问题与解决方案

不久前,由于C#语言限制(太麻烦,代码量太多,并不是无法实现),我用C++写了实现一样功能动态,供C#调用 在本机调用C++动态,都正常,但是只要是无开发、C++C环境电脑下运行,就会提示无法找到...是Release 就把运行库改成MT 运行库改成MD就会报代码错误 运行库改成MDd还是无法加载 MT    选项:链接LIB版CC++运行库。...在链接就会在CC++运行时集成到程序中成为程序中代码,程序体积会变大。 MTd  选项:LIB调试版。...MD    选项:使用DLL版CC++运行库,这样在程序运行时会动态加载对应DLL,程序体积会减小,缺点是在系统没有对应DLL程序无法运行。...MDd  选项:表示使用DLL调试版。

1.6K10

小白入门笔记:CMake编译过程详解

以自动化方式构建代码问题CMake 出现要早得多,所以会有很多选择:Make、Autotools、SCons、Ninja、Premake 等。但为什么CMake 可以后来居上呢?...都是作用在定义变量所在作用域(scope)之下;(4)、CMake缓存变量有些像C/C++指针,只是CMake中引用缓存变量value值不用像C/C++那样加一个“取地址符”,而且这个缓存变量...• VERBOSE: 继续处理,用于通常不是很有必要更详细信息。 • DEBUG: 继续处理,并包含在项目出现问题可能有用详细信息。...本示例中,我们展示如何代码编译到中,以及如何链接这些。 回看第一个例子,这里并不再为可执行文件提供单个源文件,我们现在引入一个类,用来包装要打印到屏幕上消息。...• OBJECT:可将给定add_library列表中源码编译到目标文件,不将它们归档到静态中,也不能将它们链接到共享对象中。如果需要一次性创建静态和动态,那么使用对象尤其有用。

4.3K30

SLAM——Linux操作学习

SLAM之Linux操作学习 编写一个简单HelloSLAM程序 1、使用g++编译器进行编译 2、使用CMake进行编译 3、连接到 编写一个简单HelloSLAM程序 1、使用g++编译器进行编译...大家想一下,使用g++编译确实可行,但是有很多c++文件怎么办呢?那就会很繁琐。有些c++文件需要编译成文件,怎么办呢?理论上说,任意一个C++程序文件都可以用g++进行编译。...但当程序规模较大,这时输入程序命令越来越长。因此,对于C++项目,使用一些工程管理工具会更加高效,cmake更加方便。...make 把一些中间生成文件全部放在了build下面,比较好管理,给别人发送c++代码时候也比较方便 3、连接到c++中,并不是所有的代码都会编译成可执行文件,只有带main函数才会生成可执行文件...3、如果可执行文件箱套调用文件中函数,他需要参考这个提供头文件,以明白调用格式,同 ,要把可执行程序链接到文件上。

75120

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

NDK 工具包中提供了完整一套 c/c++ 代码编译成静态/动态工具,而 Android.mk 和 Application.mk 你可以认为是描述编译参数和一些配置文件。...比如指定使用c++11还是c++14编译,会引用哪些共享,并描述关系等,还会指定编译 abi。只有有了这些 NDK 中编译工具才能准确编译 c/c++ 代码。...但是当我们开发或者使用原生代码就需要了解不同 ABI 以及为自己程序选择接入不同 ABI 。...同时在这推荐一个中文翻译简易CMake手册 2.2 CMake 使用自己及其他预建 当你需要引入已有的静态/动态(FFMpeg)或者自己编译核心部分并提供出去就需要考虑如何在 CMake...以上文档资料仅为了解决 NDK 开发过程中编译配置问题,具体 c/c++ 逻辑编写、jni等不在此范畴。

2K30

CMake 秘籍(二)

许多博客文章,例如www.viva64.com/en/a/0004/,都致力于讨论在 C++代码移植到 64 位平台遇到典型问题和解决方案。...对于某些类型操作,这一点尤其明显,而线性代数是其中最突出。本食谱展示如何启用向量化以加速使用 Eigen C++进行线性代数简单可执行文件。...本教程向您展示如何在使用 CMake 3.9 或更高版本,为简单 C++和 Fortran 程序检测并链接 OpenMP 使用导入目标。...准备工作 CC++程序可以通过包含omp.h头文件并链接正确来访问 OpenMP 功能。编译器根据性能关键部分之前预处理器指令生成并行代码。...虽然我们已经展示了如何从 C++中或多或少直接使用这些,但在现代 C++程序中可能希望有一个更高层次接口。 Eigen 作为头文件使用模板编程来提供这样接口。

39120

CMake 秘籍(五)

由于这些使用 CMake,我们需要为它们原生构建工具准备参数。...第十章:混合语言项目 在本章中,我们涵盖以下示例: 构建使用 C/C++ Fortran 项目 构建使用 Fortran C/C++项目 使用 Cython 构建 C++和 Python...与源文件一样,包含目录、编译定义和选项,当与target_link_libraries一起使用时,这些属性含义保持不变: 使用PRIVATE属性,仅被链接到当前目标,而不会被链接到以它作为依赖其他目标...使用INTERFACE属性,仅被链接到以当前目标作为依赖目标。 使用PUBLIC属性,将被链接到当前目标以及任何以它作为依赖其他目标。...Boost 提供了另一种流行选择,用于 C++代码与 Python 接口。

39620

CMake搭建编译环境总结

编译警告 CMake编译警告和报错设置 常用警告 配置交叉编译环境常需要修改 设置默认和头文件搜索路径 设置交叉编译工具 设置浮点运算处理方式 常见场景 编译动态 编译静态 编译可执行文件...对于庞大代码架构场景,通常会按模块划分,一个模块代码放到一个CMakeList中配置编译,若模块代码还是很多,将此模块再细分成多个小模块用多个CMakeList管理编译。..."gcc") ## 指定C++编译工具 set(CMAKE_CXX_COMPILER "g++") 当编译工具路径被加到环境变量中,可以直接写编译工具名称。...在配交叉编译工具,此处应写对应交叉编译工具绝对路径。...当存在被设置但是未被使用参数发出警告,需配合-Wall -Wsign-compare 当比较有符号和无符号值发出警告 配置交叉编译环境常需要修改 设置默认和头文件搜索路径 编译默认会从/usr

2.2K20

Vcpkg: 总览

Vcpkg: 总览 English Overview Vcpkg 可帮助您在 Windows、 Linux 和 MacOS 上管理 CC++ 。...安装并运行vcpkg后, 您可能希望 TAB补全 添加到您Shell中。 最后,如果您对vcpkg未来感兴趣,请查看 清单! 这是一项实验性功能,可能会出现错误。...我们建议您使用例如 C:\src\vcpkg 或 C:\dev\vcpkg 安装目录,否则您可能遇到某些构建系统路径问题。... vcpkg 作为一个子模块 当您希望vcpkg作为一个子模块加入到您工程中, 您可以在第一个 project() 调用之前将以下内容添加到 CMakeLists.txt 中, 而无需将 CMAKE_TOOLCHAIN_FILE...获取更多信息请查看 行为准则FAQ 或联系 opencode@microsoft.com提出其他问题或意见。 License 在此存储使用代码均遵循 MIT License。

1.7K10

跨平台编译工具-CMake语法特性与常用变量

最近在学习 Linux 下 C+ 开发编译知识,总结出该系列笔记,这是第五篇,可以通过以下链接阅读之前笔记: 1. Linux中编译C++代码g++工具,以及g++常用操作指令 2....Linux下C++命令行编译示例 3. Linux下GDB调试器常用指令 4. Linux下C++命令行调试实战 1....cmake 就可以解决了跨平台问题。...(hello main.cpp ${HELLO}) cmake指令变量使用 ${变量} 形式读取变量,但在 IF 逻辑判断中,直接输入变量名称即可,如上面示例代码 HELLO 2.2. cmake...: 为目标可执行文件添加需要共享 # hello动态文件链接到可执行文件main target_link_libraries(main hello) add_subdirectory : 向当前工程添加存放源文件子目录

1.1K10

Milvus 编译环境演进

一、手写动态链接 Milvus 代码分为了 C++ 和 Go 两个部分,Go 部分负责系统主体架构、分布式系统、存储/查询路等,C++ 部分负责查询、索引引擎专注于单机场景下高性能,两者之间通过...Milvus 很自然地选择 CMake 作为 C++ 构建系统,通过编写 CMakeLists.txt 描述要生成 library 和 headers,而 Go 则通过 cgo 接口链接到相应 library...不同操作系统需要指定不同编译参数 2. hard code 文件路径耦合严重,不利于维护 以上两个问题相对容易解决,在使用第三方 go library 问题会更难解决,例如 Milvus 使用了...在 Milvus 里需要做三个改造: 一是在 C++ 生成动态链接同时生成 pkg-config .pc 文件。...C++ 编译受操作系统、编译器类型、C++ 版本、libstdc++ 版本影响很大,这些变量交织在一起会产生很多意想不到错误,这里把遇到一些问题整理一番。 1.

1.4K30

CMake简易指南

感谢 C++委员会大力推广,几乎支持市面上所有通用编译环境,以及大部分开源三方均支持 cmake核心概念Target:目标单元,在CMake中,target是一个非常核心概念,与其他现代化工程系统中...一般来说,CMAKE_C_COMPILER和CMAKE_CXX_COMPILER分别指定 CC++编译器,如修改则需要同时指定-DCMAKE_TOOLCHAIN_FILE=toolchain.cmake...CMakeLists.txt开始加载,遇到第一个project(xxx)开始检查编译环境中编译器,执行完所有代码全局变量保存至CMakeCache.txt文件,再次执行配置不会再修改全局变量,...CC++编译选项。...根据这一个特征,可以扩展很多实用操作,如:编译前下载源代码,下载测试数据等基于编译事件自定义目标假设用户期望在库B编译完成依赖A拷贝至B生成路径,样例如下:add_library(libA

64350

CC++生态工具——编译构建工具CMakeCMakeList初探

我第一次参与Linux C++开发使用工具是Make,而后开始切换到CMake,一开始以为CMake是和C语言有关,原来开头C表示它可以跨平台。...${LIBRARY}") ---- 四,CMake常用环境变量 ---- --CMAKE_C_COMPILER 指定C编译器 ---- --CMAKE_CXX_COMPILER 指定C++编译器 --...指定C++编译器配置 ---- --CMAKE_INSTALL_PREFIX 指定安装路径前缀 ---- --CMAKE_EXE_LINKER_FLAGS 创建可执行文件,定义链接器配置 --...( ModernCMakeExample VERSION 1.0 LANGUAGES C++) #把源代码添加进构建目标 add_library(MyLibExample simple_lib.cpp...CMake由于足够灵活,带来问题就是晦涩难懂,笔者发现身边很多经验丰富开发者在编写CMakeList.txt一样头疼。

2.1K20

面向 C++ 现代 CMake 教程(二)

在本章中,我们涵盖以下主要主题: 基本指令和命令 如何划分你项目 思考项目结构 作用域环境 配置工具 禁用源代码内构建 技术要求 你可以在 GitHub 上找到本章中出现代码文件...只有当我们从项目中外部使用,这个目录才应该存在。它提供了其他项目在编译消耗公共头文件。我们将在第五章*,使用 CMake 编译 C++代码中回到这个主题,构建我们自己。...接下来,我们详细解释工具执行二进制工件构建步骤。这是许多关于 C++书籍所缺少部分:如何配置和使用预处理器、编译器和链接器,以及如何优化它们行为。...在少数情况下,这可能变得很重要——例如,如果您在构建使用相同多个目标,然后将它们链接到一个单一可执行文件。如果这些源目标使用不同版本同一,您可能会遇到问题。...CMake 目标属性: CMake 目标属性 传递性使用要求: CMake 构建系统传递性使用要求 第五章:使用 CMake 编译 C++代码 简单编译场景通常由工具默认配置或直接由 IDE

300

【Android NDK 开发】Android Studio 使用 CMake 导入动态 ( 构建脚本路径配置 | 指定动态查找路径 | 链接动态 )

Module 级别的 build.gradle 完整配置代码 2 . CMakeList.txt 完整配置代码 3 . Java 层代码 4 . C++代码 5 . 运行结果 VI ..../jniLibs/armeabi-v7a/libadd.a) 使用上面的方式引入动态出现于 Android.mk 配置一样问题 , 6.0 以上 Android 系统在运行时出现找不到路径问题...表示会将 C++ 参数传给编译器 # CMAKE_C_FLAGS 表示会将 C 参数传给编译器 # 参数设置 : 传递 CMAKE_CXX_FLAGS C+= 参数给编译器 , 在 该参数后面指定路径...SHARED # 参数 3 : 配置要编译源文件 native-lib.cpp) # 使用下面的方式引入动态出现于 Android.mk 配置一样问题 ,...6.0 以上 Android 系统在运行时出现找不到路径问题 # 引入动态 #add_library(add SHARED IMPORTED) # 设置函数导入路径 #set_target_properties

8.6K20
领券