linux动态连接

Linux动态连接器(ld-linux)的使用和编程 动态连接器(ld-linux)是Linux系统中的一个重要组件,用于在程序运行时加载和链接共享库。本文将介绍ld-linux的使用方法和编程技巧,并提供相应的源代码示例。动态连接器ld-linux负责在程序运行时将这些共享库加载到内存中,并进行链接,使得程序能够正常运行。本文介绍了ld-linux的使用方法和编程技巧,并提供了相应的源代码示例。通过深入理解和灵活运用ld-linux,可以更好地理解和使用Linux系统中的动态链接机制。函数是一个在共享库中定义的函数,在编译时并不知道该函数的具体地址。 阅读详情

总结:至少2个文件和共2条指令

我使用的文件是sock.h 和 wrapper.c 

使用的指令是

$ gcc wrapper.c -o wrapper.o -c

$ gcc -shared -fPIC -o libnetlib.so wrapper.o

这样就生成了libnetlib.so文件了,将libnetlib.so复制到/lib中.

并将sock.h复制到/usr/include.即可使用

以后需要用到这个库函数的时候,添加这个库函数即可:

例如:

$gcc srv.c -o srv -lnetlib

$gcc cli.c -o cli -lnetlib

下面贴出sock.h 和wrapper.c 的代码:

sock.h:


#ifndef _SOCK_H__
#define _SOCK_H__

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <poll.h>

#include <string.h>
#include <strings.h>

#include <sys/socket.h>
#include <sys/types.h>
#include <arpa/inet.h>
#include <netinet/in.h>

int Socket(int, int, int);
int Inet_pton(int, const char *, void *);
int Bind(int, const struct sockaddr *, socklen_t);
int Listen(int, int);
int Accept(int, struct sockaddr *, socklen_t *);
int Connect(int, const struct sockaddr *, socklen_t);
int Setsockopt(int, int, int, const void *, socklen_t);

int TCP_listen(const char *, unsigned short, int, int *,
		struct sockaddr *, socklen_t *);
int TCP_connect(const char *, const unsigned short);

pid_t Fork(void);
ssize_t Write(int, const void*, size_t);
ssize_t Read(int, void*, size_t);

#endif


wrapper.c:

#include "sock.h"
#include <stdlib.h>
#include <errno.h>

int Socket(int domain, int type, int protocol)
{
	int sockfd;
	sockfd = socket(domain, type, protocol);

	if(sockfd == -1){
		perror("socket() error");
		exit(0);
	}

	return sockfd;
}

int Inet_pton(int af, const char *src, void *dst)
{
	int ret;
	ret = inet_pton(af, src, dst);

	if(ret != 1){
		perror("inet_pton() error");
		exit(0);
	}
	return ret;
}

int Bind(int sockfd, const struct sockaddr *addr,
		socklen_t addrlen)
{
	int ret;
	ret = bind(sockfd, addr, addrlen);

	if(ret != 0){
		perror("bind() error");
		exit(0);
	}
	return ret;
}

int Listen(int sockfd, int backlog)
{
	int ret;
	ret = listen(sockfd, backlog);

	if(ret != 0){
		perror("listen() error");
		exit(0);
	}
	return ret;
}

int Accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen)
{
	int connfd;
	connfd = accept(sockfd, addr, addrlen);

	if(connfd == -1){
		perror("accept() error");
		exit(0);
	}

	return connfd;
}

int Connect(int sockfd, const struct sockaddr *addr,
		socklen_t addrlen)
{
	int ret;
	ret = connect(sockfd, addr, addrlen);

	if(ret != 0){
		perror("connect() error");
		exit(0);
	}
	return ret;
}

pid_t Fork(void)
{
	pid_t pid;
	pid = fork();

	if(pid < 0){
		perror("fork() error");
		exit(0);
	}
	return pid;
}

int Setsockopt(int sockfd, int level, int optname,
				const void *optval, socklen_t optlen)
{
	int ret;
	ret = setsockopt(sockfd, level, optname, optval, optlen);

	if(ret == -1){
		perror("setsockopt() error");
		printf("%d\n", errno);
		exit(1);
	}

	return ret;
}

int Getsockopt(int sockfd, int level, int optname,
			void *optval, socklen_t *optlen)
{
	if(getsockopt(sockfd, level, optname, optval, optlen) == 0)
		return 0;

	perror("getsockopt() error");
	exit(1);
}

int TCP_connect(const char *ipaddr, const unsigned short port)
{
	int sockfd;
	sockfd = Socket(AF_INET, SOCK_STREAM, 0);

	struct sockaddr_in srvaddr;
	bzero(&srvaddr, sizeof srvaddr);
	srvaddr.sin_family = AF_INET;
	srvaddr.sin_port = htons(port);
	Inet_pton(AF_INET, ipaddr, &srvaddr.sin_addr);

	Connect(sockfd, (struct sockaddr *)&srvaddr, sizeof srvaddr);

	return sockfd;
}

int TCP_listen(const char *ipaddr, unsigned short port,
			int backlog, int *connfd, struct sockaddr *cliaddr,
			socklen_t *clilen)
{
	int sockfd;
	sockfd = Socket(AF_INET, SOCK_STREAM, 0);

	struct sockaddr_in srvaddr;
	bzero(&srvaddr, sizeof srvaddr);
	srvaddr.sin_family = AF_INET;
	srvaddr.sin_port = htons(port);

	if(ipaddr == NULL)
		srvaddr.sin_addr.s_addr = htonl(INADDR_ANY);
	else
		Inet_pton(AF_INET, ipaddr, &srvaddr.sin_addr);

	Bind(sockfd, (struct sockaddr *)&srvaddr, sizeof srvaddr);

	Listen(sockfd, backlog);
		
	*connfd = Accept(sockfd, cliaddr, clilen);

	return sockfd;
}

ssize_t Read(int fd, void *buf, size_t count)
{
	int nread;
	while((nread=read(fd, buf, count)) == -1 && errno == EINTR);
	
	if(nread == -1){
		perror("read() error");
		exit(1);
	}

	return nread;
}

ssize_t Write(int fd, const void *buf, size_t count)
{
	ssize_t ret = 0, total = 0;

	while(count > 0){
		while((ret=write(fd, buf+total, count)) == -1
				&& errno == EINTR);
		if(ret == -1){
			perror("write() error");
			exit(1);
		}

		count -= ret;
		total += ret;
	}
	
	return total;
}
/*

int Poll(struct pollfd *client, nfds_t nfds, int timeout)
{
	int nready;
	while(1){
		nready = poll(client, nfds, timeout);

		if(nready == -1 && errno != EINTR){
			perror("poll() error");
			exit(0);
		}

		else if(nready == -1 && errno == EINTR)
			 continue;
			
		else if(nready > 0)
			return nready;
	}
}
*/

int Select(int nfds, fd_set *rset, fd_set *wset,
			fd_set *eset, struct timeval *timeout)
{
	int ret;
	ret = select(nfds, rset, wset, eset, timeout);
	if(ret < 0){
		perror("select() error");
		exit(1);
	}
	return ret;
}

最后再顺便贴出这个srv.c 和 cli.c

cli.c:

#include "sock.h"

#define MAXSIZE 100

int main(void)
{
	int fd;
	fd = Socket(AF_INET, SOCK_STREAM, 0); // TCP socket

	struct sockaddr_in srvaddr;
	bzero(&srvaddr, sizeof srvaddr);

	srvaddr.sin_family = AF_INET;
	srvaddr.sin_port = htons(50001);
	Inet_pton(AF_INET, "127.0.0.1", &srvaddr.sin_addr);

	Connect(fd, (struct sockaddr *)&srvaddr, sizeof srvaddr);

	char buf[MAXSIZE];
	while(1)
	{
		bzero(buf, MAXSIZE);
		fgets(buf, MAXSIZE, stdin);
		write(fd, buf, strlen(buf));
	}

	return 0;
}

srv.c:

#include "sock.h"

#define MAXSIZE 100

int main(void)
{
	int fd;
	fd = Socket(AF_INET, SOCK_STREAM, 0);

	struct sockaddr_in srvaddr;
	bzero(&srvaddr, sizeof srvaddr);

	srvaddr.sin_family = AF_INET;
	srvaddr.sin_port = htons(50001);
	Inet_pton(AF_INET, "127.0.0.1", &srvaddr.sin_addr);

	Bind(fd, (struct sockaddr *)&srvaddr, sizeof srvaddr);

	Listen(fd, 5);

	int connfd = Accept(fd, NULL, NULL);

	char recv[MAXSIZE];
	while(1)
	{
		bzero(recv, MAXSIZE);
		if(read(connfd, recv, MAXSIZE-1) <= 0)
			break;
		write(STDOUT_FILENO, recv, strlen(recv));
	}

	return 0;
}


libnet.dll libnet.lib编译后的库 libnet1.1.2编译完成后的libnet.dll与libnet.lib 立即下载

相关推荐

linux 或 arm 下有多个网络连接时检测哪一个是活动连接,并启动SOCKET服务

linux 或 arm 下有多个网络连接时检测哪一个是活动连接,并启动SOCKET服务

网络编程学习日记-----信号驱动

一、IO模型----信号驱动 使用了系统编程中信号的机制,首先让程序安装SIGIO信号处理的函数(当套接字有数据到达时,系统会自动发出SIGIO这个信号)我们只需要在程序中捕捉这个信号,就知道有没有数据到达了,如果有数据到达,那么读取出来就可以了。 模型 signal(SIGIO、fun); sockfd -------只要soockfd有数据产生、 那么就会自动产生一个sigio信号 2.信号驱动特点以及步骤: 特点:只适用于UDP协议,不适用于TCP协议 步骤: 1)由于数据什..

KLh 468

【PCIe DL_Feature详解】

   Data Link Control and Management State Machine在PCIe Gen4引入了DL_Feature这个状态,该状态主要用来协商PCIe link 两端是否支持新的DL Feature,目前为止DL Feature只引入了Scaled Flow Control 来提高Gen4及以上的效率。   DL_Feature 这个状态是可选的,当 Data Link Feature Extended Capability中Data Link Feature Exchang

sinat_38294441的博客 3233

Linux网络编程-UDP组播服务客户端代码实现

目录 一、UDP组播介绍 1.UDP介绍 2.UDP组播 3.组播地址 4.组播的原理: 二、UDP组播编程 1.UDP组播的基本步骤 2.加入组播组-setsockopt 三、UDP组播服务端代码实现 1.代码实现 2.运行结果 四、UDP单播客户端代码实现 1.代码实现 2.运行结果 一、UDP组播介绍 1.UDP介绍 UDP协议进行信息的传输之前不需要建议连接。换句话说就是客户端向服务器发送信息,客户端只需要给出服...

ProYuan的博客 4729

Unity开发HoloLens应用:从打包到部署的完整指南

本文为Unity开发者提供了将应用部署到HoloLens设备的完整实战指南。详细讲解了从环境准备、Unity项目配置、生成Visual Studio工程,到最终构建APPX安装包并通过设备门户或Visual Studio进行部署的全流程,帮助开发者高效完成混合现实应用的打包与安装。

red88的博客 1019

Android各个版本存储权限适配

虽然 Android10 上面提出了外部存储分区的概念,不过之前的版本中,我们只要为应用添加了。1、AndroidManifest添加权限设置。3、拒绝权限时跳转详细设置页面。就可以像之前的方式一样访问手机的外部存储空间。2、请求所有文件管理权限。

sig321的专栏 1846

UNIX网络编程简单练习

// 客户端程序 #include #include #include #include #include #include #include int sockfd; const char* ip_string = "127.0.0.1"; const int port = 65531; int main(){ sockfd = socket(AF_INET, SOCK_STR

just_young的专栏 2521

大语言模型(LLM)在组合优化中的新突破:LLM-LNS与FunSearch性能对比

本文深入探讨了大语言模型(LLM)在组合优化中的创新应用,重点对比了LLM-LNS与FunSearch两种方法的性能差异。研究表明,LLM-LNS在物流路径规划、资源调度等场景中展现出显著优势,其双层自演化架构能有效平衡探索与利用,相比传统方法提升效率约43%。文章还提供了实践选择指南,帮助开发者根据具体需求选用合适的技术方案。

weixin_42526415的博客 407

(初级)并发服务器之子进程

大多数TCP服务器是并发的,他们为每个待处理的客户连接调用fork派生出一个子进程。      下面是一个很初级的使用子进程实现并发的例子。      1.  server.cpp: #include #include #include #include #include #include #include #incl

leiting_imecas的博客 561

MMSE (Minimum Mean Square Error)均衡原理讲解

MMSE是一种将接收数据的MSE(均方误差)最小化的模型。有了这句话,很多问题就会在你的脑海中蹦出来。 什么是均方误差?最小化MSE "的物理含义是什么? 等等。 让我们从一个我们现在已经非常熟悉的通道模型开始。(我希望你现在也熟悉下面的表达方式。) MMSE作为一种均衡器,是一种后处理算法,它可以帮助我们找出接收到的数据,使之尽可能地接近原始数据(传输数据)。简而言之,MMSE中最重要的步骤是找到一个如下图所示的矩阵G。如果我们假设没有噪声,这个[G]矩阵可以简单的作为信道矩阵(H^-1)的倒数。但

Celeste的博客 4万+

OpenClaw实战系列03:Slack/Telegram国际版接入实战指南

在当今的软件开发和工作流自动化中,将项目管理工具与即时通讯平台集成已成为提高团队协作效率的关键。OpenClaw作为一个开源的自动化工具,通过接入Slack和Telegram国际版,可以实现实时通知、自动化任务触发和团队协作的无缝对接。本文将详细介绍如何实现OpenClaw与这两个主流即时通讯平台的集成。OpenClaw是一个开源的自动化工作流引擎,支持多种触发器和执行器,能够帮助开发团队实现CI/CD流程、任务调度、监控告警等自动化场景。模块化设计:支持插件化扩展多触发器支持。

PeterPan的博客 588

TCP/IP之服务端多线程通信

好吧!这次总共有4个文件.分别是sock.h   wrapper.c   tcp_server.c  tcp_client.c 编译方法: $ gcc tcp_server.c wrapper.c -o tcp_server  $ gcc tcp_client.c wrapper.c -o tcp_client 以下是运行服务端 $ ./tcp_server  再打开多

linsoiler1的专栏 1528

从登录到应用可见:在 SAP S/4HANA Cloud Private Edition 中创建用户与打通 SAP Fiori 权限的完整思路

在SAP S/4HANA系统中,用户创建远非简单的账号开通,而是涉及认证、授权、数据访问等多维度的复杂过程。用户主数据记录(User Master Record)是系统访问的起点,包含登录方式、角色分配等关键信息。认证解决"你是谁"的问题,授权则决定"你能做什么"。SAP Fiori访问链路涉及Launchpad内容分配、应用启动映射、OData服务权限等多层校验。角色(Role)通过PFCG维护,包含业务目录(Catalog)和空间(Space)等元素,共同构成完整

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 150

linux 动态连接库 原理,Linux下的动态连接库及其实现机制

摘 要:本文介绍了动态连接库的优点,详细阐述了x86体系结构上Linux系统的编译器、连接器、加载器如何使用多种重定位方式来实现该功能关键词:动态连接库;Linux;重定位The Implementation Mechanism of DLL under Linux【Abstract】In this paper, we discuss the advantage of using dynamic ...

weixin_32282271的博客 486

ESP32 WIFI 智能巡线小车设计与实现(四足 / 四轮通用)

本文设计的 ESP32 WIFI 智能巡线小车,硬件模块化、软件轻量化,兼容四足与四轮两种结构,实现了自动巡线与 WIFI 远程控制双功能。系统成本低、易上手,适合嵌入式初学者学习 WIFI 通信、传感器应用、运动控制等核心知识点,也可在此基础上扩展蓝牙控制、避障、视觉识别等功能。

weixin_42300449的博客 152

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

Linux的动态连接库

Linux的动态连接库一.              动态链接库的原理及使用大家对Windows操作系统中的DLL文件一定十分熟悉,其实这种软件组件化的方法在Linux中也可以实现。其实插件和 DLL 通常是用来无须编写整个新应用程序而添加功能的极好方法,一般来讲,在不更改原有应用程序的情况下,插件为现有应用程序提供新功能。Linux环境下甚至做的更好。Linux提供4个库函数、一个头

tianxiangyuan的专栏 3326

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

Linux动态连接原理

Linux动态连接原理 注意: 以下所用的连接器是指,ld, 而加载器是指ld-linux.so; 1,  GOT表; GOT(Global Offset Table)表中每一项都是本运行模块要引用的一个全局变量或函数的地址。可以用GOT表来间接引用全局变量、函数,也可以把GOT表的首地址作为一个基 准,用相对于该基准的偏移量来引用静态变量、静态函数。由于加载器不会把运行模块加载到固定地

tinyhare的专栏 1311

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

mysql linux动态库_linux动态库与静态库混合连接

一、在应用程序需要连接外部库的情况下,linux默认对库的连接是使用动态库,在找不到动态库的情况下再选择静态库。使用方式为:gcc test.cpp -L. -ltestlib如果当前目录有两个库libtestlib.so libtestlib.a 则肯定是连接libtestlib.so。如果要指定为连接静态库则使用:gcc test.cpp -L. -static -ltestlib使用静态库进...

weixin_39541189的博客 244

C/C++——linux默认动态库连接、动态库与静态库混合连接-Wl

linux默认对库的连接是使用动态库 在应用程序需要连接外部库的情况下,linux默认对库的连接是使用动态库,在找不到动态库的情况下再选择静态库。 使用方式为: gcc test.cpp -L. -ltestlib 如果当前目录有两个库libtestlib.so libtestlib.a 则肯定是连接libtestlib.so。 如果要指定为连接静态库则使用: gcc test.cpp -L. ...

静水流深且细水长流 2091

Linux下的动态连接库及其实现机制

 摘 要:本文介绍了动态连接库的优点,详细阐述了x86体系结构上Linux系统的编译器、连接器、加载器如何使用多种重定位方式来实现该功能关键词:动态连接库;Linux;重定位The Implementation Mechanism of DLL under Linux【Abstract】In this paper, we discuss the advantage of using dynamic

技术资料库 1368

linux 动态连接

动态连接是现在操作系统中程序的默认使用方式,非常重要。但是搞懂动态连接你必须真正掌握静态连接。不然你是看不明白的。

god_wen的博客 1471

linux动态库与静态库混合连接

在应用程序需要连接外部库的情况下,linux默认对库的连接是使用动态库,在找不到动态库的情况下再选择静态库。使用方式为: gcc test.cpp -L. -ltestlib 如果当前目录有两个库libtestlib.so libtestlib.a 则肯定是连接libtestlib.so。如果要指定为连接静态库则使用: gcc test.cpp -L. -static -ltestlib

学习是为了探索这个世界的本质 926

Linux 动态连接加载器 ld-linux用法

2011-11-06 15:08 Linux 动态连接加载器 ld-linux用法 ld-linux有两种用法,间接调用和直接调用。 间接调用时,连接器会把ld-linux的执行路径嵌入到可执行文件中,如elf文件时,ld-linux被放在.interp段中。 直接调用时,在命令行下输入/lib/ld-linux-so.* [选项] [可执行程序] [程序参数] ld-linu

yuyin86的专栏 1876

Linux下动态共享库 连接和加载路径

1. 连接时找不到某一个函数,出现“ xxxxx undefined”,应该就是连接时找不到相应的动态库,连接时动态库的路径如下: 1> 默认路径是:/lib,  /usr/lib/,  /usr/local/lib 2> -L: 指定连接时动态库的路径 3> LD_LIB

finding的专栏 7970
上一篇: TCP/IP UDP
下一篇: TCP/IP之服务端多线程通信
Shawyou
博客等级 码龄16年 51粉丝 53原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值