如何编译c/fortran动态/静态链接库

author author     2023-04-05     432

关键词:

参考技术A 首先,传统的编译,也就是
静态编译
是把
源文件
翻译成目标文件,这个是一次性过程,也就是你所谓的静态编译。
后来的Java和.NET等语言,首先编译成中间形式,然后运行过程中根据需要编译成本地代码(注意这个过程不是一次性的,下次运行重新编译),这个就是JIT(即时编译)技术,从即时编译发展出了动态编译技术
————————————
(传统的)编译完成后,像C/C++、Fortran、汇编等语言,可以把多个目标文件合并到一个
库文件
中,这个就是静态库。比如常说的
库函数
printf就是libc里面的函数。
如果有了启动函数(main),main里面使用了printf,就可以通过
静态链接
技术,从libc中提取出printf所在的文件加入到可执行文件中,如果printf还需要其它函数,就继续搜索并加入列表,直到形成一个
闭包
。这个就是静态链接。
可是静态链接有个明显的缺点,如果每个程序都需要printf,那么printf这个函数的代码就会同时存在在每个程序中,这样也太占地方了吧。所以发明了动态连接技术,其实有两种形式。无论哪一种,都是首先记录下需要调用printf这个函数以及所在的
动态库
,等到运行的时候再加载动态库,从动态库中找到真正的printf去执行。
由于,
动态链接
技术需要一些额外的信息,传统的静态库是不具备的,这些额外信息主要是重复加载和卸载时所需要的一些代码,因此需要
动态链接库

c/c++编译问题,静态库,动态库。

...下面有动态库libtest.so,libalex.so,有一个静态库libtest.a,我想编译main.c链接动态库libalex.so和静态库libalex.a,怎么做?试过,不行的有:1.g++main.c-L./-lalex-static-ltest(这样static是作用全局的,全用静态库)2.g++main.c-L./-lalex-L./libtest.a(不行,... 查看详情

c/c++不能运行时动态编译代码,编写公式编辑器,用户输入循环判断语句保存后执行该怎么实现啊?

...,用户输入循环判断语句保存后执行,C/C++不能运行时动态编译代码,,是怎么实现的啊参考技术A这个需要实现一个简单得编译器,需要对编译原理比较精通,不是三两句就搞定得这不是C++,只是一些简单得逻辑 查看详情

linux下apache如何安装rewritemodule?

我问的就是怎么用apache的源文件编译一个mod_rewrite.so文件!编译的时候一直报错找不到目录.貌似原因是我的apache里面没有mod_rewrite.c。错误信息是/usr/local/apache/build/libtool--silent--mode=compilegcc-prefer-pic-DAP_HAVE_DESIGNATED_IN... 查看详情

请问,ld链接生成的时候,加载动态库/静态库顺序如何?

想了解,如果-lm命令的时候,同时有libm.a和libm.so的话,实际上用哪个?我在solaris上面做的试验,如果两个同时存在,则选择libm.so。如果只有libm.a那么-lm就是链接libm.a问题:所有平台都是这样的么?还是和我的具体使用的编译器或者... 查看详情

c语言程序是如何执行的

C语言怎么运行,以linux举例:1、编写好源代码example.c;假设是放在目录/home/user/下面;2、进入/home/user/目录,编译源代码:gccexample.c-oexample,如果没有编译错误,将生成执行文件example;3、在当前目录下输入./example,就可以运行了;... 查看详情

请教如何在centos下安装c/c++编译,开发环境

参考技术A首先,需下载以下软件包EclipseIDEforC/C++Developers该下载包已经集成了CDT了所以就不需要再像以前那样劳神费力去配置了。不过,Eclipse运行需要有Java运行环境库(JRE)和Java开发工具包(JDK),如果没有安装的可以参考我前... 查看详情

./configure--prefix=/opt/apache是啥意思

这是按照路径的设置,./configure会生成makefile;等make编译源代码生成相应的动态库或者可执行文件;执行makeinstall后,生成的动态库或者可执行文件就会拷贝到/opt/apache里面。参考技术A意思是设置这个程序编译后的安装的路径你编... 查看详情

linux编译c语言时出错/home/zwlong/222/lesduct2.c:323:undefinedreferenceto`sqrt'

Linux编译C语言时出错/home/zwlong/222/LESduct2.c:321:undefinedreferenceto`sqrt'/home/zwlong/222/LESduct2.c:323:undefinedreferenceto`pow'/home/zwlong/222/LESduct2.c:325:undefinedreferenceto`sqrt'/home/zwlong/222/LESduct2.c:332:undefinedreferenceto`sqrt'参考技术Aundefinedrefe... 查看详情

mysql编译安装时如何非交互式设置密码

#初始化数据/application/mysql-5.7.24/bin/mysqld--initialize--user=mysql--basedir=/application/mysql-5.7.24--datadir=/application/mysql-5.7.24/data&>/application/mysql_passwd.txtecho$(tail-1/application/mysql_passwd.txt|awk-F""'... 查看详情

如何在ubuntu/debian/linuxmint中编译和安装wxwidgets

参考技术Asudoapt-getinstallgitgccgitclonehttps://github.com/wxWidgets/wxWidgetscdwxWidgetsconfiguremakemakeinstall 查看详情

cmd调用gcc编译运行c语言后,c语言会再产生一个窗口显示结果,如何将这些内容显示在cmd命令窗口中?

也就是说,cmd编译完c语言后不显示别的内容了,我想把c语言显示窗口中显示的内容再在cmd窗口中显示一遍#include<stdio.h>#include<stdlib.h>intmain()system("gcc-Esource/try.c-osource/try.i");system("gcc-Ssource/try.i-osource&#... 查看详情

fortran在计算上的优势?

人言FORTRAN在工程计算方面有优势,现在工程计算软件还多用FORTRAN开发,请问FORTRAN在计算上到底有什么优势(和C/C++比较),究竟好在哪?最好谈得深入点,谢谢。1楼的说了半天,根本没解释我关心的“为什么适合工程计算”;... 查看详情

使用cmake编译c/c++程序

参考技术ACMakeTutorialCMakeReference定义程序编译规则生成可执行文件的最简单版本的CMakeLists.txt以上CMakeLists.txt定义的编译规则是将源文件tutorial.c编译成名为Tutorial的可执行文件。一般用法是,新建一个文件夹,一般命名为build,在... 查看详情

linux环境下手动编译java(非eclipse环境),出现packagejunit.frameworkdoesnotexist应如何设置?

操作系统是redhat,在系统中使用yum安装了包junit-3.8.2-3jpp.1.x86_64.rpm,设置了环境变量JUNIT_HOME=/usr/share/java/junit.jar,并且把/usr/share/java/junit.jar、/usr/share/java/junit-3.8.2.jar和/usr/share/java都加入了CLASSPATH变量中,但是编译依然出现如下... 查看详情

fortran与c的混编

(Fortran)作为用于科学计算的一种编译型语言积累了大量数值计算的库,但对于现代编程来说,(Fortran)无(GUI)库是其一大短板。本文就(Fortran)与(C)混合编程进行简单介绍。(Fortran和C)混编共有3种方式:基于源代码的混编基于动态连接... 查看详情

打开vim后怎样编写c/c++/java文件即编译运行编写完后如何保存保存路径在哪路径是不是可更改

1、用vim编写文件代码,一般需要按i、a、o、O、A、I这六个字母键进入插入模式,输入完成后,按ESC键退出插入模式。2、可以直接在vim中执行,vim通过"!"来执行外部命令。下图是在vim中通过”!“号执行gcc编译hello.c的文件,生成... 查看详情

如何指定/etc/init.d/mysqld所加载的配置文件

参考技术A没办法直接修改mysqld的linux默认参数文件位置,你直接在mysqld的参数中用--init-file=file_name或者重新修改编译mysql的C源文件。或者在你的/etc/init.d不要直接放mysqld,面是放个脚本命令mysql--init-file=file_name 查看详情

item47:使用traits类提供类型信息

...来介绍Traits的实现和使用。本文以iterator_traits为例介绍了如何实现traits类,以及如何 查看详情