我经常听到“静态链接”和“动态链接”这两个术语,通常指的是用C编写的代码。,C++或C#.它们是什么,它们到底在说什么,它们在链接什么? 最佳答案 从源代码(你写的)到可执行代码(你运行的)有两个阶段(在大多数情况下,不考虑解释代码)。首先是将源代码转换为目标模块的编译。第二个,链接,是将对象模块组合在一起形成可执行文件。区别在于,除其他外,允许第三方库包含在您的可执行文件中,而您不会看到它们的源代码(例如用于数据库访问、网络通信和图形用户界面的库),或者用于在不同的语言(例如C和汇编代码),然后将它们链接在一起。当您静态将文件
我参与了一些关于Linux库的辩论,并想确认一些事情。据我所知(如果我错了,请纠正我,我稍后会编辑我的帖子),在构建应用程序时有两种使用库的方法:静态库(.a文件):在链接时,将整个库的拷贝放入最终应用程序,以便库中的函数始终可供调用应用程序使用共享对象(.so文件):在链接时,对象只是通过相应的头文件(.h)对其API进行验证。直到运行时才实际使用该库,在那里需要它。静态库的明显优点是它们允许整个应用程序自包含,而动态库的好处是可以替换“.so”文件(即:如果由于安全原因需要更新)bug),而无需重新编译基本应用程序。我听说有些人区分共享对象和动态链接库(DLL),即使它们都是“.s
我参与了一些关于Linux库的辩论,并想确认一些事情。据我所知(如果我错了,请纠正我,我稍后会编辑我的帖子),在构建应用程序时有两种使用库的方法:静态库(.a文件):在链接时,将整个库的拷贝放入最终应用程序,以便库中的函数始终可供调用应用程序使用共享对象(.so文件):在链接时,对象只是通过相应的头文件(.h)对其API进行验证。直到运行时才实际使用该库,在那里需要它。静态库的明显优点是它们允许整个应用程序自包含,而动态库的好处是可以替换“.so”文件(即:如果由于安全原因需要更新)bug),而无需重新编译基本应用程序。我听说有些人区分共享对象和动态链接库(DLL),即使它们都是“.s
为了便于与英文原文对照学习与理解(部分翻译可能不准确),本文中的每个子章节标题和引用使用的都是官方手册英文原称。命令及命令行选项统一使用斜体书写。高频小节会用蓝色字体标出。3LinkerScripts每个链接都由一个链接脚本控制。该脚本使用链接器命令语言编写。链接脚本的主要目的是描述如何将输入文件中的各个部分映射到输出文件中,并控制输出文件的内存布局。大多数链接脚本仅此而已。但是,必要时,链接器脚本也可以使用下面描述的命令来指导链接器执行更多的其它操作。链接器通常使用一个链接脚本。如果没有为其提供,链接器将会使用默认的编译在链接器执行文件内部的脚本。可以使用命令’–verbose’显示默认的
为了便于与英文原文对照学习与理解(部分翻译可能不准确),本文中的每个子章节标题和引用使用的都是官方手册英文原称。命令及命令行选项统一使用斜体书写。高频小节会用蓝色字体标出。3LinkerScripts每个链接都由一个链接脚本控制。该脚本使用链接器命令语言编写。链接脚本的主要目的是描述如何将输入文件中的各个部分映射到输出文件中,并控制输出文件的内存布局。大多数链接脚本仅此而已。但是,必要时,链接器脚本也可以使用下面描述的命令来指导链接器执行更多的其它操作。链接器通常使用一个链接脚本。如果没有为其提供,链接器将会使用默认的编译在链接器执行文件内部的脚本。可以使用命令’–verbose’显示默认的
cudafiledidnotlinkwithfunctiondefinedinCfile我有一个cuda文件test.cu,其中包含一个文件cuda.h。cuda.h包含test.cu.中使用的以下函数定义externvoidcheck_error(cudaError_tstatus);这个函数在cuda.c中定义如下:voidcheck_error(cudaError_tstatus){ cudaError_tstatus2=cudaGetLastError(); if(status!=cudaSuccess) { constchar*s=cudaGetErrorString(
Canyoustaticallycompileacygwinapplication?cygwin是否允许静态编译的二进制文件?这将防止cygwin1.dll出现在目标机器的PATH上。不,目前无法静态链接到cygwin1.dll;如果您的应用程序不使用unix仿真(即纯win32),您可以将-mno-cygwin传递给编译器。另请参阅常见问题解答:http://cygwin.com/faq/faq.html#faq.programming.win32-no-cygwinhttp://cygwin.com/faq/faq.html#faq.programming.static-linkingCy
cudafiledidnotlinkwithfunctiondefinedinCfile我有一个cuda文件test.cu,其中包含一个文件cuda.h。cuda.h包含test.cu.中使用的以下函数定义externvoidcheck_error(cudaError_tstatus);这个函数在cuda.c中定义如下:voidcheck_error(cudaError_tstatus){ cudaError_tstatus2=cudaGetLastError(); if(status!=cudaSuccess) { constchar*s=cudaGetErrorString(
Canyoustaticallycompileacygwinapplication?cygwin是否允许静态编译的二进制文件?这将防止cygwin1.dll出现在目标机器的PATH上。不,目前无法静态链接到cygwin1.dll;如果您的应用程序不使用unix仿真(即纯win32),您可以将-mno-cygwin传递给编译器。另请参阅常见问题解答:http://cygwin.com/faq/faq.html#faq.programming.win32-no-cygwinhttp://cygwin.com/faq/faq.html#faq.programming.static-linkingCy