我的目标是:library2.so
正在使用library1.so
和mycode。o
正在使用(应该链接库)library2.so
(可能还有library1.so
源代码是(省略一行头文件):
library1.cu:
__device__ void func1_lib1(void){}
图书馆2.cu:
#include "library1.h"
__global__ void func1_lib2(void)
{
func1_lib1();
}
extern "C"
void func2_lib2(void)
{
func1_lib2<<<1,1>>>();
}
霉菌代码c:
#include "library2.h"
int main(void)
{
func2_lib2();
}
我正在根据Makefile构建共享库
broken:
rm -f *.o *.so
nvcc -arch=sm_30 --compiler-options '-fPIC' -dc library1.cu
nvcc -arch=sm_30 --compiler-options '-fPIC' -dlink -o cuda-lib1.o library1.o
gcc -shared -Wl,-soname,library1.so -o library1.so library1.o uda-lib1.o
nvcc -arch=sm_30 --compiler-options '-fPIC' -dc library2.cu
nvcc -arch=sm_30 --compiler-options '-fPIC' -dlink -o cuda-lib2.o library2.o -lrary1
gcc -shared -Wl,-soname,library2.so -o library2.so library2.o cuda-lib2.o
gcc -c mycode.c
gcc -o mycode -L. -lrary2 -lrary1 mycode.o
working:
rm -f *.o *.so
nvcc -arch=sm_30 --compiler-options '-fPIC' -dc library1.cu
nvcc -arch=sm_30 --compiler-options '-fPIC' -dc library2.cu
nvcc -arch=sm_30 --compiler-options '-fPIC' -dlink -o cuda-lib.o library1.o library2.o
gcc -shared -Wl,-soname,library.so -o library.so library1.o library2.o cuda-lib.o
gcc -c -fPIC mycode.c
gcc -o mycode -L. -lrary -L/usr/local/cuda/lib64 -lcuda -lcudart mycode.o
< code>make working
工作起来没有任何问题。但它并没有形成一个图书馆链。< code>library1.cu和< code>library2.cu在同一个< code >中。so文件。
使破坏
失败
nvcc -arch=sm_30 --compiler-options '-fPIC' -dlink -o cuda-lib2.o library2.o -lrary1
nvlink error : Undefined reference to '_Z10func1_lib1v' in 'library2.o'
如果我通过nm
检查 library1.so
,则目标(T)_Z10func1_lib1v
内部。
在您的“损坏”方法中,您正在尝试创建一个仅包含__device__
函数的 library1.so
(共享库):
__device__ void func1_lib1(void){}
任何其他希望使用该__device__
函数的对象都必须使用可重定位的设备代码/单独的编译和链接,当然您正在尝试这样做。
然而,对于库,设备链接仅支持静态库中包含的函数。请注意nvcc
手册中的以下语句:
设备链接器能够读取静态主机库格式(Linux和Mac OS X上的.a,Windows上的.lib)。它忽略任何动态(.so或.dll)库。
和:
请注意,设备链接器仅支持静态库。
所以你的一般策略不起作用。一个可能的解决方法是将library1.cu代码放在静态库中:
rm -f *.o *.so
nvcc -arch=sm_30 --compiler-html" target="_blank">options '-fPIC' -dc library1.cu
nvcc -arch=sm_30 --lib -o cuda-lib1.a library1.o
nvcc -arch=sm_30 --compiler-options '-fPIC' -dc library2.cu
nvcc -arch=sm_30 --compiler-options '-fPIC' -dlink -o cuda-lib2.o library2.o cuda-lib1.a
gcc -shared -Wl,-soname,library2.so -o library2.so -L/usr/local/cuda/lib64 -lcuda -lcudart library2.o cuda-lib2.o cuda-lib1.a
gcc -c mycode.c
gcc -o mycode -L. -lrary2 mycode.o
或者创建一个< code >序列。所以库不需要跨库边界的设备链接,这或多或少在您的“工作”案例中得到了证明。
我正在使用Fresco库将图像和GIF加载到我的应用程序中。我遇到的最大的限制是壁画的布局宽度和高度必须设置。因此,我设置了简单的付款人视图,如下所示: 我的问题是,如果图像的高度大于宽度,那么在图像的右边有很多空白(见附件),但是高度是好的 然后它可能发生在高度,如果实际图像小于宽度(见附件),所以这里,因为固定的高度是250dp,有很多空白的图像下面。
提供了大量的库例程。 有些内置在解释器, ex.exe, exw.exe or exu 。 其他的是用Euphoria编写的,你必须在euphoria\include目录中包含一个.e文件才能使用它们。 要指出可以传入和返回的对象类型,使用以下前缀 - S.No 前缀和描述 1 x 一般对象(原子或序列) 2 s 一个序列 3 a 一个原子 4 i 整数 5 fn 用作文件编号的整数 6 st 字
我试着建立Gradle: 尝试:使用--info或--debug选项运行以获取更多日志输出。 这是我的等级。建造:
Arduino Math库(math.h)包含许多用于处理浮点数的有用数学函数。 Library宏 (Library Macros) 以下是头部math.h中定义的宏 - 下面给出了标题math.h中定义的宏列表 宏 值 描述 M_E 2.7182818284590452354 The constant e. M_LOG2E 1.4426950408889634074 /* log_2 e */
我目前正在努力加深对CMake的理解。我试着用http://libqglviewer.com/introduction.html]LibQGLViewer是我的一个C项目中的第三方库。 相关子目录中的CMakeLists.txt看起来像下面的部分,我有问题是add_libary部分,为了清晰起见,省略了一些头文件和源文件 我的应用程序运行,一切都很好。 但是,我读到,应该只包含ADDILL库的源文
我必须给主类加上JavaMailUtl类这是我的JavaMailUtl类: 这是我的主要课程: 当我尝试运行项目时,出现以下错误: 多次仔细检查代码,发现没有问题,我的每个对象都指向了正确的位置。