Cmake+Ubuntu+CUDA+C混合編譯
2.原始碼
/cuda/cube.cu
/cuda/cu.cuh#include "cuda_runtime.h" #include "device_launch_parameters.h" #include <stdio.h> #include "cube.cuh" __global__ void cube_core(int *dev_a, int *dev_b){ int tid=blockIdx.x; int tmp=*(dev_a+tid); *(dev_b+tid)=tmp*tmp*tmp; } void cube(int result[], int n){ int a[n]; for(int i=0;i<n;i++){ a[i]=i; } int *dev_a=NULL; int *dev_b=NULL; cudaMalloc((void**)&dev_a,n*sizeof(int)); cudaMemset((void**)&dev_a,0,n*sizeof(int)); cudaMalloc((void**)&dev_b,n*sizeof(int)); cudaMemset((void**)&dev_b,0,n*sizeof(int)); cudaMemcpy(dev_a,(void**)&a,n*sizeof(int),cudaMemcpyHostToDevice); cube_core<<<n,1>>>(dev_a,dev_b); cudaMemcpy((void **)&result[0],dev_b,n*sizeof(int),cudaMemcpyDeviceToHost); }
#ifndef CUBE_H
#define CUBE_H
extern "C" void cube(int *result, int n);
#endif
/cuda/CMakeLists.txt/src/print.cproject(CUBE) cmake_minimum_required(VERSION 2.8) find_package(CUDA REQUIRED) file(GLOB_RECURSE CURRENT_HEADERS *.cuh) file(GLOB CURRENT_SOURCES *.cu) list(APPEND CUDA_NVCC_FLAGS "-std=c++11") source_group("Include" FILES ${CURRENT_HEADERS}) source_group("Source" FILES ${CURRENT_SOURCES}) cuda_add_library(cube STATIC ${CURRENT_HEADERS} ${CURRENT_SOURCES}) #not used in this demo TARGET_LINK_LIBRARIES(cube pthread) TARGET_LINK_LIBRARIES(cube cufft) TARGET_LINK_LIBRARIES(cube pcap)
#include<stdio.h>
#include"print.h"
void print(int *a, int n){
printf("\tHola\n");
for(int i=0;i<n;i++)
printf(" %d\n",*(a+i));
printf("\tAdios\n");
}
/src/print.h#ifndef PRINT_H
#define PRINT_H
extern "C" void print(int *a, int n);
#endif
/src/CMakeLists.txt/main.cproject(PRINT) cmake_minimum_required(VERSION 2.8) file(GLOB_RECURSE CURRENT_HEADERS *.h) file(GLOB CURRENT_SOURCES *.c) set(CMAKE_C_COMPILER g++) list(APPEND CMAKE_C_FLAGS "-lstdc++") #source_group("Include" FILES ${CURRENT_HEADERS}) #source_group("Source" FILES ${CURRENT_SOURCES}) add_library(print STATIC ${CURRENT_HEADERS} ${CURRENT_SOURCES})
#include<stdio.h>
extern "C" void cube(int *a, int n);
extern "C" void print(int *a, int n);
int main(){
int N=10;
int a[10];
cube(a,N);
print(&a[0],N);
}
/CMakeLists.txtproject(PRO)
cmake_minimum_required(VERSION 2.8)
add_subdirectory(cuda ./cuda/bin)
add_subdirectory(src ./src/bin)
set(EXTRA_LIBS ${EXTRA_LIBS} cube print)
SET(CMAKE_C_COMPILER g++)
list(APPEND CMAKE_C_FLAGS "-lstdc++")
add_executable(pro main.c)
target_link_libraries(pro ${EXTRA_LIBS})
3.切換到build目錄,編譯,連結,執行cd build
cmake ..
make
./pro
4.結果三.問題及解決
1.-lcufft not found
拷貝cuda庫裡面的libcufft檔案,並生成軟連結
sudo cp /usr/local/cuda-6.5/lib/libcufft.so.6.5.53 /usr/lib/arm-linux-gnueabihf/libcufft.so.6.5.53
sudo ln –s /usr/lib/arm-linux-gnueabihf/libcufft.so.6.5.53 /usr/lib/arm-linux-gnueabihf/libcufft.so.6.5
sudo ln –s /usr/lib/arm-linux-gnueabihf/libcufft.so.6.5 /usr/lib/arm-linux-gnueabihf/libcufft.so
2./usr/bin/ld:cuda/libgpu.a(gpu_generated_active.cu.o): undefined reference to symbol '[email protected]@GLIBCXX_3.4'//usr/lib/arm-linux-gnueabihf/libstdc++.so.6:error adding symbols: DSO missing from command line
CMakeLists.txt新增:set(CMAKE_C_COMPILER g++)# gcc使用c++庫。
注意:直接用gcc進行連結時,-lstdc++放在最後,因為gcc是按從右到左的順序查詢依賴庫的。
3./home/ubuntu/Documents/Active/active_uart/cuda/active.cu(1535): error:namespace "std" has no member "to_string"
/cuda/CMakeLists.txt 新增:list(APPEND CUDA_NVCC_FLAGS “-std=c++11”)
相關推薦
Cmake+Ubuntu+CUDA+C混合編譯
一. 環境Jetson TK1 開發套件+Ubuntu 14.04Cmake安裝:sudo apt-get install cmake二.示例1.目錄樹2.原始碼/cuda/cube.cu#include "cuda_runtime.h" #include "device_l
VS2010中CUDA和C++混合編譯(兩種方式)
在做專案整合的時候需要用到cpp和cuda檔案聯調,自己摸索了兩種方式實現cpp和cu檔案混合編譯。 本文環境: windows7 64位VS2010CUDA5.5英偉達顯示卡Tesla C1060 前言 裝好CUDA 5.5 sdk後,預設會自動新增好系統環境變數
VS2010 CUDA和C++混合編譯
在做專案整合的時候需要用到cpp和cuda檔案聯調,自己摸索了兩種方式實現cpp和cu檔案混合編譯。 本文環境: windows7 64位VS2010CUDA5.5英偉達顯示卡Tesla C1060 前言 裝好CUDA 5.5 sdk後,預設會自動新增好系統環境變數。 因此不需要額外配置,不過
C與C++混合編譯
C語言與C++的函式編譯後的命名規則不同,因此在C++工程中直接引用C實現的原始碼會存在“undefined reference”問題,即找不到函式的實現。 因此,在C的標頭檔案前,應使用extern “C”提示編譯器,該程式碼是使用C語言進行編寫的,如以下形式: ext
STM32cubeMX改C/C++混合編譯
首先說明一下,本文的開發環境是linux,基於STM32cubeMX生成工程新增C++部分程式碼和選項。寫給微控制器開發windows轉linux新手,高手略過。cubeMX生成工程預設是C語言,還有一部分彙編。首先加入file.cpp到工程,在Middlewares下新建c
16bit C & ASM 如何混合編譯?
.exe 資料 bit urb 價值 nmake 開發 include 生成 起源: 今天在看以前沒看完的一本書《圖形程序開發人員指南》,在做裏面的例子。 第一章就出問題了,一個例子“L1_2.c, L1_3.asm" ,這是C程序和ASM匯編程序的混合編譯
Ubuntu下怎麽編譯並運行C、C++和Pascal語言?
tro 開始 用戶 步驟 ide gcc 但是 col inf 很多同學在安裝了Ubuntu的環境後,發現在Windows下的許多東西都打不開了,但是用網站上的在線IDE又不是很方便。 所以,ljn教你如何在Ubuntu下編譯並運行C、C++和Pascal。 一.編譯並
c++與matlab混合編譯———讀取mxArray內容
mxArray作為一種特殊且複雜的資料結構,需要通過matrix.h提供的相關介面去訪問。在混合編譯過程中,matlab變數以mxArray形式儲存,通常用mxArray* 型別來指定matlab工作空間變數的地
Ubuntu下編輯並編譯執行c++程式
一、使用vim編輯c++程式碼: vim hello.cpp 輸入如下程式碼: #include <iostream> using namespace std; int main() { cout<<"Hello world!"<<endl;
ubuntu下c/c++/python/go編譯執行
C語言: .c檔案 編譯器gcc//my_code下hello.c檔案 $sudo apt install gcc $gcc hello.c -o hello $./hello C++: .cpp檔案 編譯器g++//my_code下hello.cpp檔案
ubuntu下c/c++/python/go編譯運行
工程 ubunt ubuntu下 python 執行 ++ blog 當前 com C語言: .c文件 編譯器gcc//my_code下hello.c文件 $sudo apt install gcc $gcc hello.c -o hello $./hello
ubuntu下c++編譯連結caffe的工程
最近在做深度網路相關的專案,我們通常可以從github上download很多相關的原始碼,但是在我們的機子上編譯的時候通常會遇到很多問題,將我最近踩的坑做了一些總結,希望對大家有所幫助。 1.如果直接g++ ×××.cpp 出現下面或者是出現某種語法錯誤之類的 [Cli
ubuntu下C++多執行緒程式設計(cmake生成makefile)
最近做專案要用到多執行緒的程式設計,又要用到opencv因此採用cmake生成makefile然後進行編譯的方法比較簡單。這裡給出多執行緒的簡單例項。 主函式非常簡單: #include <iostream> #include <pthread.h&g
在Windows下使用CMake+MinGW搭建C/C++編譯環境
1.1 MinGWMinGW 是一個可自由使用和自由釋出的Windows特定標頭檔案和使用GNU工具集匯入庫的集合,允許你生成本地的Windows程式而不需要第三方C執行時庫。簡單說,MinGW是一個編譯環境,包含了C++程式碼編譯過程中需要的三方庫、標頭檔案……用於完成C+
MATLAB和C++編譯器混合編譯:Xcode 8的不相容錯誤
最近在看tracking方面的論文和程式碼,發現大多數都是用matlab和c++混合編譯的。對於linux和windows這兩個系統,暫時還沒有碰到編譯器不相容的問題,但是mac上面卻有問題,在命令列裡輸入: mex -setup 會有下面的錯誤提示:
混合編譯:c++檔案呼叫c檔案變數和函式、c檔案呼叫c++檔案變數和函式
1.c++檔案呼叫c檔案變數和函式 前言:以前見到extern "C"這樣的語句,只是簡單地知道跟外部連結有關,但是沒有深刻理解它的意思。 首先,為什麼要使用extern "C"修飾符? C++呼叫其它語言的函式,由於編譯器生成函式的機制不一樣,所以需要經過特殊處理,才可以
C和C++的混合編譯--extern “C”的使用
參考地址:http://www.cnblogs.com/skynet/archive/2010/07/10/1774964.html 在實際程式設計中,有時會需要用到C\C++的混合編譯,通過extern “C”即可實現混合編譯,以下是個人蔘照網友的資料以及自己的實際操作
Swift和Objective-C混合編程——Swift調用OC
分享 發現 load 另一個 == 方法 代碼 swift 應用 在iOS應用的開發中。Swift必將代替OC,兩者的趨勢是“短期共存,長期代替”。但曾經有太多的代碼是用OC語言完畢的,而Swift的開發也從 OC中繼承了非常多的特性。兩者也是有非常多的類
Ubuntu下配置交叉編譯環境
conf core chains 編譯 配置 -c 進行 spa 編譯環境 [email protected]/* */:~$ sudo apt-get update # 如果不安裝 gawk subversion wine1.6-dev 編譯會報錯 [ema
Swift 4 和 Objective-C 混合編程(一) 快速起步
命名方式 import 編譯器 選擇性 工程 Swift 4 和 Objective-C 在同一個工程裏的混搭編程的方法你可以在 xcode 裏同時使用 Swift 和 Objective-C(以下簡稱OC)來寫代碼,混搭編程的好處很多,比如允許大量代碼的復用,在性能和開發效率之間找到平衡