当前位置:首页 » 编程软件 » c语言重写函数编译静态库

c语言重写函数编译静态库

发布时间: 2022-03-30 11:11:07

① 请教高手教一下用gcc编译c语言函数,再合并为静态库,最后调用的过程。

应该编译成.a文件
ar rc c:\libab.a c:\a.o c:\b.o
然后,再编译执行文件
gcc -o c:\m.exe c:\m.c -LC:\ -lab
你这样试试

② C语言中如何将自己常用的函数封装到编译器的库函数中具体应该怎么做呢

用编译器提供的库管理工具。
C语言的编译器都会提供一个命令行工具,可以把自己编译后的.obj模块加入指定的库文件,以后使用时只需要连接该库文件即可。这个命令行工具通常是lib.exe,用这个工具可以查看库中的模块,可以把模块加入到库中,可以从库中删除模块。这个工具不仅仅是自己建立的库文件的管理工具,可以管理所有的库文件,包括C语言提供的标准库。

③ 我用c语言写了两个函数,怎么把它变成c的库函数随时调用求解释!

改成。h 放到库文件里

调用函数时 包含这个。h文件即可

④ C语言里如何编译库函数最好举例,详细点的!

太长了发2部分给你ok学习任何知识,循序渐进总是最好的方式。不幸的是,很多人明知这个道理,却总是想走所谓的捷径。如果你是一个刚刚开始学习编程的中学生,或者你是一个刚刚进入计算机学院的本科生,又或者你是一个决心在计算机领域有所建树的初学者,你一定迫切地想知道,学习计算机技术,究竟应该从哪里下手。 我的建议是:数学、英语、C语言。 为什么C语言如此重要?我们从学习方法开始说起。书本上描述的东西,倘若不经过我们的亲自实践,是难以被彻底消化吸收的。计算机组成原理讲解了浮点数的格式,如果我们能看到并分析内存或寄存器中某个浮点数的表示,那比单纯的纸上谈兵要强一千倍;数据结构与算法似乎很难,如果你能把书上的例子实现出来,然后把习题做完,只需啃完一本好书,你也可以是算法高手;操作系统原理其实不仅仅是原理,只有做一些内核方面的实验才能真正有深刻理解;还有许多新潮的技术,比如JavaEE、PHP、Ajax、.NET等等等等,很多高手学习这些技术只需要很短的时间,不必说,他们肯定是C语言的高手。C语言几乎是一切计算机技术的通用工具,包括计算机的各种基本理论。没有精通C语言的决心,就不要涉足计算机领域。 为什么是C语言而不是C++不是Java不是其它?因为C语言最简单。你需要掌握一个语言工具,但也许并不需要“面向对象”、“模板”、“函数重载”等等一大堆概念。C语言足够低级,非常非常地贴近计算机的底层结构,不会让你迷失在概念的汪洋大海。除了“指针”,C语言没有真正意义上的难点,而“指针”,恰恰是理解计算机底层结构精髓的关键所在 所以,初学者们不必思考应该学什么,等把C语言精通了,你自己便会知道下一步如何去走。如果你对操作系统内部感兴趣,你便可以试着研究一下Unix的内核,除了C语言,你还需要一些汇编语言和保护模式的知识;如果你对算法感兴趣,那么恭喜你,C语言足够使用了;如果你对Windows编程感兴趣,去看看《Windows程序设计》吧,作者清楚的告诉你“只需要C语言的基础”;如果你对任何其它语言感兴趣,尽管去学吧,不过还是建议先学C++,因为你需要一些“面向对象”的知识。 一、要读就读好书,否则不如不读 大名鼎鼎的谭浩强教授出了一本《C语言程序设计》,据说发行量有超过400万,据我所知,很多学校都会推荐这本书作为C语言课本。虽然本人的名字(谭浩宇)跟教授仅仅一字之差,但我是无比坚定地黑他这本书的。这本书不是写给计算机专业的学生的,而是给那些需要考计算机等级考试的其它专业学生看的。这本书的主要缺点是:例子程序非常不专业,不能教给你程序设计应该掌握的思考方式;程序风格相当地不好,会让你养成乱写代码的恶习;错误太多,曾经有人指出过这本书的上百个错误,其中不乏关键的概念性错误。好了,这本书我也不想说太多了,有兴趣大家可以网络一下。 Kernighan和Ritchie的《The C Programming Language》(中译名《C程序设计语言》)堪称经典中的经典,不过旧版的很多内容都已过时,和现在的标准C语言相去甚远,大家一定要看最新的版本,否则不如不看。另外,即使是最经典最权威的书,也没有办法面面俱到,所以手边常备一本《C语言参考手册》是十分必要的。《C语言参考手册》就是《C Reference Manual》,是C语言标准的详细描述,包括绝大多数C标准库函数的细节,算得上是最好的标准C语言的工具书。顺便提一句,最新的《C程序设计语言》是根据C89标准修订的,而《C语言参考手册》描述的是C99标准,二者可能会有些出入,建议按照C99标准学习。还有一本《C和指针》,写得也是相当地不错,英文名是《Pointers on C》,特别地强调指针的重要性,算是本书的一个特点吧。不过这本书并不十分适合初学者,如果你曾经学过C语言,有那么一些C语言的基础但又不是很扎实,那么你可以尝试一下这本书。我相信,只要你理解了指针,C语言便不再神秘。 如果你已经啃完了一本C语言教材,想要更进一步,那么有两本书你一定要看。首先是《C Traps and Pitfalls》(中译名《C陷井与缺陷》),很薄的一本小册子,内容非常非常地有趣。要注意一点,这本书是二十多年前写成的,里面提到的很多C语言的缺陷都已被改进,不过能够了解一些历史也不是什么坏事。

⑤ C语言为什么可以重写标准库函数

这个问题是一个好问题,我之前也没思索过或者尝试过,
首先我们弄清楚一件事,函数声明可以放在任何头文件,实现可以放在任何实现该函数的源文件中,那么就存在一个问题:
编译时,到底优先去使用哪一个,为什么没有把标准库中的函数扩展过来;在windows下标准库被编译成了msvcr120.dll(msvcr100.dll,这里指release版),所以并不是扩展到代码中,而是在调用时动态链接;
而题主在其中自定义文件中实现了该函数,所以编译时找到了该函数的实现,并不会去链接dll(这应该是编译器做的一些工作,确定系统的dll需要加载哪些),所以题主的程序执行时就只有一份fputc了,并不冲突。
题主可以通过快捷键跳转声明就知道了,VS下,点选fputc实现函数按F12跳转到声明,指向的是stdio.h,再按一次跳转到你自己的定义了。Qt的话使用F2。
大概就是这样子了,可追问。

⑥ C语言编译问题 静态链接

链接静态库的意思就是在编译阶段需要将静态库链接到工程中,这样在编译时程序才不会出错,在用到静态库的函数时能够找到函数的实现,如果没有链接静态库则编译时会报错。
这里需要区分的就是链接动态库与静态库的区别,你可以到网上找一些资料看看。
而且链接静态库是将整个库文件都导入到了工程中,所以会增加工程的大小。

⑦ 在C语言中,如何将用户自定义函数变成库函数(.h)文件

除了楼上两位说的,还要把头文件放在你的编译环境中设置的include directory中,比如,一般会放在main的文件所在的目录。

⑧ 哪位大神能用c语言 重写opencv 的下面6个函数或者从源码中整理出来,可以编译,运行

去git上面看看源码

//先说一下这个函数吧
//cvNamedWindow
CV_IMPLintcvNamedWindow(constchar*name,intflags){
CV_FUNCNAME("cvNamedWindow");
if(!name)CV_ERROR(CV_StsNullPtr,"NULLname");
HighguiBridge::getInstance().namedWindow(name);
returnCV_OK;
}
//而它又需要HighhuiBridge这个类,它有个单例工厂方法
HighguiBridge&HighguiBridge::getInstance(){
staticHighguiBridgeinstance;
returninstance;
}
//上面2个函数实际调用这2个成员函数
CvWindow*HighguiBridge::namedWindow(cv::Stringname){
CvWindow*window=HighguiBridge::getInstance().findWindowByName(name.c_str());
if(!window)window=createWindow(name);
returnwindow;
}
//创建窗口先是查找有没有已有窗口
CvWindow*HighguiBridge::findWindowByName(cv::Stringname){
autosearch=windowsMap->find(name);
if(search!=windowsMap->end())returnsearch->second;
returnnullptr;
}
//如果没有会用这个函数创建
CvWindow*HighguiBridge::createWindow(cv::Stringname){
CvWindow*window=newCvWindow(name);
windowsMap->insert(std::pair<cv::String,CvWindow*>(name,window));
returnwindow;
}
//创建窗口是CvWindow类
classCvWindow{
public:
CvWindow(cv::Stringname,intflag=CV_WINDOW_NORMAL);
~CvWindow();
/**@briefNOTE:prototype.
.
*/
voidcreateButton(cv::Stringname);
/**@.

.
*/
voidcreateSlider(cv::Stringname,int*val,intcount,CvTrackbarCallback2on_notify,void*userdata);
/**@briefUpdateswindowimage.
@.
Thefunctionupdateswindowimage.-doesnothing.
*/
voipdateImage(CvMat*arr);
/**@(slider).
@paramnameNameofthewindow.
(slider).
nullptr.
*/
CvTrackbar*findTrackbarByName(cv::Stringname);
Page^getPage();
private:
cv::Stringname;
//HoldsimagedatainCVformat
CvMat*imageData;
//
std::map<cv::String,CvTrackbar*>*sliderMap;
//Windowcontentsholder
Page^page;
//
Image^imageControl;
//Containerforsliders
Panel^sliderPanel;
//Containerforbuttons
//TODO:prototype,notavailableviaAPI
Panel^buttonPanel;
//.
//RequiredsinceimageData->
intimageWidth;
//t
staticconstPlatform::String^markupContent;
//DefaultSlidersize,
;
};
//CvWindwo构造函数为
CvWindow::CvWindow(cv::Stringname,intflags):name(name){
this->page=(Page^)Windows::UI::Xaml::Markup::XamlReader::Load(const_cast<Platform::String^>(markupContent));
this->sliderMap=newstd::map<cv::String,CvTrackbar*>();
sliderPanel=(Panel^)page->FindName("cvTrackbar");
imageControl=(Image^)page->FindName("cvImage");
buttonPanel=(Panel^)page->FindName("cvButton");
//.
//,afterthatwecan
//updateothercontrols
imageControl->Loaded+=refnewWindows::UI::Xaml::RoutedEventHandler(
[=](Platform::Object^sender,
Windows::UI::Xaml::RoutedEventArgs^e){
//
for(autoiter=sliderMap->begin();iter!=sliderMap->end();++iter){
iter->second->getSlider()->Width=imageControl->ActualWidth;
}
//
//TODO:implementwhenaddingbuttons
});
}

⑨ 如何将c语言的math.h编译为静态库在mcu上使用

库函数的源码你是看不到的。要找实现的话得去网络。自带的都是编译好的东西(用到时直接调用)不是原C程序。
至于sin()的实现。如果你学过高数应该知道泰勒展开。
不知道的话直接给你公式:sin(x)=x-(x^3)/3!+(x^5)/5!+...(按这规律求和下去,x是弧度)

用一个for循环。要精确的话循环的次数多些就行

⑩ 怎样用C语言重写FILE的库函数,比如重写fopen(),fgetc(),fclose(),fseek(),printf().

这最好找个专业的,一般人是没办法写的,一是难度大,二是这么费事没报酬也不好找着
找网络能找着无疑是大海捞针,最好去专业点的平台去找

热点内容
反恐精英15游戏服务器ip 发布:2025-01-23 21:13:38 浏览:850
起床的战争玩什么服务器 发布:2025-01-23 21:03:06 浏览:141
企业级安卓手机防毒软件哪个好 发布:2025-01-23 20:59:28 浏览:243
数据库精美 发布:2025-01-23 20:37:05 浏览:235
mysql怎么编译驱动 发布:2025-01-23 20:35:15 浏览:467
修改数据库的语句是 发布:2025-01-23 20:26:17 浏览:762
linuxping域名 发布:2025-01-23 20:24:34 浏览:479
神经网络算法应用 发布:2025-01-23 20:18:36 浏览:219
冒险岛按键精灵脚本下载 发布:2025-01-23 19:46:50 浏览:751
安卓访问共享需要开通什么服务 发布:2025-01-23 19:43:01 浏览:518