首页
学习
活动
专区
工具
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.7K20
您找到你想要的搜索结果了吗?
是的
没有找到

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

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.1K30

当我们自己写了一个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、如果可执行文件箱套调用文件中函数,他需要参考这个提供头文件,以明白调用格式,同 ,要把可执行程序链接到文件上。

74820

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搭建编译环境总结

编译警告 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

63250

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

【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

Android JNI学习(二)——实战JNI之“hello world”

模式.png 里面有个三个项目 C++ Standard:即C++标准,使用下拉列表选择你希望使用C++标准,选择Toolchain Default 会使用默认CMake设置。...第一个参数——native-lib:指定目标 第一个参数——${log-lib}:目标接到NDK中日志, 这其实是一个最基础CMakeLists.txt ,其实CMakeLists.txt...运转流程 1、Gradle 调用外部构建脚本CMakeLists.txt 2、CMake 按照构建脚本命令 C++ 源文件 native-lib.cpp 编译到共享对象中,并命名为 libnative-lib.so...七、CMake应用 我们在做日常需求时候,往往会遇到一个问题,即在已有的项目中,添加C,这样就不能通过上面的创建流程,来使用CMake。那怎么办?...Gradle现在支持编译C/C++代码内置支持,并且Android插件再可用时集成该支持。

2.1K42

手把手教你如何在Android下进行JNI开发(入门)

在默认情况下,NDK通过Androoid自带最小化C++运行库(system/lib/libstdc++.so)来提供标准C++头文件.然而,NDK提供了可供选择C++实现,你可以通过此变量来选择使用哪个或链接到程序...Java 可以通过 JNI 调用本地 C/C++ 代码,本地 C/C++ 代码也可以调用 java 代码。...Java 通过 C/C++ 使用本地代码一个关键性原因在于 C/C++ 代码高效性。...(2)NDK:这套工具集允许为 Android 使用 CC++ 代码。 (3)CMake:一款外部构建工具,可与 Gradle 搭配使用来构建原生。...创建支持C++项目 新建支持C++项目 在新建项目,勾上 IncludeC++support就行了: 在向导 Customize C++ Support 部分,有下列自定义项目可供选择: C+

2.9K10

最好 Windows C++ 编译器

而随着新高级 C++ 标准(C++ 17、C++ 20)、新指令集扩展、以及代码优化更高标准出现,究竟什么样编译器才算优秀? 以下为译文: 近年来,市场上C++编译器数量有所下降。...随着新高级C++标准(C++ 17、C++ 20)、新指令集扩展(如带有数百条新指令AVX512),以及代码优化更高标准出现,编译器构建变得更加复杂。...中等内存模型只有在直接链接到外部DLL中变量才需要(这无论如何都是不好编程实践)。Cygwin版本另一个缺点是,在分发可执行文件必须包含Cygwin DLL。...事实上,我发现在没有Visual Studio CMake框架情况下,Clang编译器作为命令行工具使用更加方便。...当越来越少程序员实际使用,英特尔会继续维护它吗?英特尔编译器附带了一些非常有用函数,可用于许多特殊用途,但这些函数与其他编译器工作原理是一样

3K30
领券