GVKun编程网logo

有关Spring web.xml的一些信息 和 标签(参考Hello World示例)(spring中xml中标签大全详解)

15

如果您对有关Springweb.xml的一些信息和标签和参考HelloWorld示例感兴趣,那么这篇文章一定是您不可错过的。我们将详细讲解有关Springweb.xml的一些信息和标签的各种细节,并对

如果您对有关Spring web.xml的一些信息 和 标签参考Hello World示例感兴趣,那么这篇文章一定是您不可错过的。我们将详细讲解有关Spring web.xml的一些信息 和 标签的各种细节,并对参考Hello World示例进行深入的分析,此外还有关于1. Spring 5 MVC 的 HelloWorld、5分钟构建spring web mvc REST风格HelloWorld、AngularJS入门教程之Helloworld示例、c – 预链接错误:prelink-cross:简单的hello world示例的实用技巧。

本文目录一览:

有关Spring web.xml的一些信息 和 标签(参考Hello World示例)(spring中xml中标签大全详解)

有关Spring web.xml的一些信息 和 标签(参考Hello World示例)(spring中xml中标签大全详解)

我在Spring MVC World上还很陌生。今天,我研究由STS生成的简单“ Hello World”示例:文件—> Spring模板项目—>
Spring MVC项目

在web.xml中,我有DispatcherServlet的声明和由它处理的请求映射…到目前为止一切正常

在web.xml中,我还有这部分代码:

<!-- The definition of the Root Spring Container shared by all Servlets and Filters --><context-param>    <param-name>contextConfigLocation</param-name>    <param-value>/WEB-INF/spring/root-context.xml</param-value></context-param><!-- Creates the Spring Container shared by all Servlets and Filters --><listener>    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class></listener>

阅读有关ContextLoaderListener的Spring文档,我读到该类执行侦听器的引导程序以启动Spring的根WebApplicationContext,但是…这到底意味着什么?

另一个疑问是我要传递给上下文的contextConfigLocation参数……究竟是什么?打开/WEB-INF/spring/root-
context.xml文件,它似乎不包含任何配置…这是我的模板项目创建过程自动创建的无效配置文件吗?Spring项目应包含哪种配置?

我认为在此Hello World项目中未使用tath和标签,因为如果删除这些标签,projext仍然可以很好地运行..对吗?

答案1

小编典典

ContextLoaderListener是启动Spring容器的类。基本上,每个Spring应用程序都由几个bean和连线组成(有关哪些bean相互依赖的说明性描述)。此描述以前是用XML编写的(如今,我们有了注释,Java配置,CLASSPATH扫描等)。

没有Spring容器,您的bean只是Java类,而Spring配置文件只是一个无用的XML文档。ContextLoaderListener读取该文件,找到您的类,实例化它们并连线。然后将所有的豆子放入一个容器中。

此外,ContextLoaderListener还会在应用程序关闭时关闭上下文(如果需要清理,则关闭所有bean)。

1. Spring 5 MVC 的 HelloWorld

1. Spring 5 MVC 的 HelloWorld

Spring 5 最近也出来了,目前版本号是 5.0.0.M1。这个专栏用于记录我学习 Spring MVC 的过程。


下面构建一个基于 Spring 5 的 Spring MVC 应用。
文件组织图如下:
图片描述
使用工具:Spring Tool Suite 3.8(装有 Spring 插件的 Eclipse 也可以,建议最新版);Tomcat 8;JDK 8; Maven 3

1). 创建一个 Maven Web 项目,项目摘要如下:

图片描述

2). 编写 pom.xml 文件:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">

    <modelVersion>4.0.0</modelVersion>
    <groupId>com.techmap</groupId>
    <artifactId>spring5mvc</artifactId>
    <packaging>war</packaging>
    <version>0.0.1-SNAPSHOT</version>
    <name>spring5mvc Maven Webapp</name>
    <url>http://maven.apache.org</url>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>

        <!-- 解决控制台输出 UTF-8 中文文本时乱码的问题 -->
        <argLine>-Dfile.encoding=UTF-8</argLine>

        <!-- 自定义参数 -->
        <spring.version>5.0.0.M1</spring.version>

    </properties>

    <dependencies>
        <!-- Jstl 支持 -->
        <dependency>
            <groupId>javax.servlet.jsp.jstl</groupId>
            <artifactId>javax.servlet.jsp.jstl-api</artifactId>
            <version>1.2.1</version>
        </dependency>

        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>3.1.0</version>
        </dependency>

        <!-- log4j 支持 -->
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.17</version>
        </dependency>
    
        <!-- JSR 330 注解支持 -->
        <dependency>
            <groupId>javax.inject</groupId>
            <artifactId>javax.inject</artifactId>
            <version>1</version>
        </dependency>

        <!-- AspectJ 支持 -->
        <dependency>
            <groupId>org.aspectj</groupId>
            <artifactId>aspectjweaver</artifactId>
            <version>1.8.9</version>
        </dependency>
        <dependency>
            <groupId>org.aspectj</groupId>
            <artifactId>aspectjrt</artifactId>
            <version>1.8.9</version>
        </dependency>

        <!-- Spring 支持 -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
            <version>${spring.version}</version>
        </dependency>

        <!-- Spring 框架支持 -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-beans</artifactId>
            <version>${spring.version}</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-tx</artifactId>
            <version>${spring.version}</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>${spring.version}</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context-support</artifactId>
            <version>${spring.version}</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-aop</artifactId>
            <version>${spring.version}</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-web</artifactId>
            <version>${spring.version}</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>${spring.version}</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
            <version>${spring.version}</version>
        </dependency>

        <!-- JUnit 支持 -->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
        </dependency>

    </dependencies>

    <repositories>
        <repository>
            <id>spring-milestones</id>
            <name>Spring Milestones</name>
            <url>https://repo.spring.io/libs-milestone</url>
            <snapshots>
                <enabled>false</enabled>
            </snapshots>
        </repository>
    </repositories>

    <build>
        <finalName>spring5mvc</finalName>
    </build>

</project>

3). 编写 web.xml 文件

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns="http://java.sun.com/xml/ns/javaee"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
    id="WebApp_ID" version="3.0">

    <display-name>spring5mvc</display-name>

    <welcome-file-list>
        <welcome-file>index.jsp</welcome-file>
    </welcome-file-list>

    <context-param>
        <description>Spring MVC 上下文配置文件路径</description>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:root-context.xml</param-value>
    </context-param>

    <servlet>
        <description>Spring MVC 核心 Servlet</description>
        <servlet-name>dispatcher</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value></param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>dispatcher</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>

    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>

</web-app>

这里配置了 Spring MVC 的核心 Servlet:DispatcherServlet。还指定了上下文配置文件的名称与路径:classpath:root-context.xml。如果不指定这个配置文件的名称与路径,默认的是 WEB-INF 目录下的一个叫做 [servlet-name]-servlet.xml 的 Spring 配置文件。

4). 进行 Spring MVC 上下文配置

web.xml 文件中指定了 Spring MVC 上下文配置文件为 root-context.xml,这个文件放在 src/main/resources 下。下面是这个文件的内容:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:mvc="http://www.springframework.org/schema/mvc"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd
        http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.3.xsd">

    <context:component-scan base-package="com.techmap.examples.controllers" />
    
    <!-- 
        SpringMVC:启用 Spring MVC 注解驱动
         -->
    <mvc:annotation-driven />

</beans>

这个上下文配置文件目前只识别包 com.techmap.examples.controllers 下的控制器,即带有注解 @Controller 的。注意 <mvc:annotation-driven />,这表示启动 Spring MVC 的注解驱动。我测试了一下,不添加是不行的。

5). 编写控制器

root-context.xml 文件中指定了控制器所在的包路径。下面在这个包路径下写一个控制器 HelloWorldController:

package com.techmap.examples.controllers;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
public class HelloWorldController
{
    
    @RequestMapping("/helloWorld")
    public String helloWorld(Model model)
    {
        System.out.println("-> Hello World!");
        
        model.addAttribute("message", "Hello World!");
        return "helloWorld";
    }
}

6). Web 主页

在 webapp 目录下添加一个简单的 index.jsp 文件:

<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
<%
    String basepath = request.getScheme() + "://" + request.getServerName() + ":" 
            + request.getServerPort() + request.getContextPath() + "/";
%>
<!DOCTYPE html>
<html>
<body>
<h2>首页</h2>
</body>
</html>

7). 部署、运行与说明

至此,应用创建完成。把应用部署到 tomcat 中。在浏览器中输入

http://localhost:8080/spring5mvc

浏览器中应该会显示 index.jsp 页面。在浏览器中输入

http://localhost:8080/spring5mvc/helloWorld

应该会报错,报错信息应该是 HTTP Status 500,会像下面那样:

HTTP Status 500 - Circular view path [helloWorld]: would dispatch back to the current handler URL [/spring5mvc/helloWorld] again. Check your ViewResolver setup! (Hint: This may be the result of an unspecified view, due to default view name generation.)

原因是,虽然找到了这个路径,但是没有对应的视图可以显示。在控制台中,应该可以找到类似下面的输出:

...
DEBUG 2016-09-01 09:09:39,157 Last-Modified value for [/spring5mvc/helloWorld] is: -1  (DispatcherServlet.java:951) 
-> Hello World!
DEBUG 2016-09-01 09:09:39,201 Invoking afterPropertiesSet() on bean with name ''helloWorld''  (AbstractAutowireCapableBeanFactory.java:1620) 
...

这说明确实执行了控制器。关于视图,会在第二篇中给出一个简单的例子。

**)这里附上我使用的 log4j.properties 内容:

# Set root logger level to WARN and append to stdout
log4j.rootLogger=DEBUG, stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout

# Pattern to output the caller''s file name and line number.
#log4j.appender.stdout.layout.ConversionPattern=%d %5p (%c:%L) - %m%n
log4j.appender.stdout.layout.ConversionPattern=%-5p %d{yyyy-MM-dd HH:mm:ss,SSS} %m  (%F:%L) \n

# Print only messages of level ERROR or above in the package noModule.
log4j.logger.noModule=DEBUG

# Spring Stuff
log4j.logger.org.springframework.web.servlet.DispatcherServlet=DEBUG

其他

其实像上面那样一路走来,实在是很麻烦。更加省事的方法(实际上隐藏了更多细节)是使用 Spring Boot。官网上有快速让自己的 Controller 跑起来的教程

5分钟构建spring web mvc REST风格HelloWorld

5分钟构建spring web mvc REST风格HelloWorld

当然写本文的目的不是为了速度,只是表明现在构建一个Spring web mvc Rest风格的HelloWorld应用会很简单。不过如果看过Spring Boot这个项目,可能只需要最多3分钟就能构建一个简单的Rest风格应用。回头研究下,然后分享下。

 

我的构建环境

JDK 7

Maven 3

Servlet3容器

 

创建项目

首先使用Maven创建一个普通Maven应用即可,不必是web的。

 

添加依赖

<!-- servlet 3 -->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>3.0.1</version>
        </dependency>

        <!--spring context -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context-support</artifactId>
            <version>4.0.0.RELEASE</version>
        </dependency>

        <!--spring webmvc -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>4.0.0.RELEASE</version>
        </dependency>

        <!--jackson -->
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>2.2.3</version>
        </dependency>

 servlet3依赖scope是provided表示环境提供,然后添加spring-context-support和spring-webmvc依赖,最后用于json的jackson依赖。非常简单明了。

 

添加maven插件

为了方便测试,添加jetty的maven插件,这样直接使用mvn jetty:run即可运行。

<build>
        <finalName>springmvc</finalName>
        <plugins>
            <plugin>
                <groupId>org.mortbay.jetty</groupId>
                <artifactId>jetty-maven-plugin</artifactId>
                <version>8.1.8.v20121106</version>
                <configuration>
                    <reload>manual</reload>
                    <webAppConfig>
                        <contextPath>/${project.build.finalName}</contextPath>
                    </webAppConfig>
                    <connectors>
                        <connector implementation="org.eclipse.jetty.server.nio.SelectChannelConnector">
                            <port>9080</port>
                            <!--<maxIdleTime>60000</maxIdleTime>-->
                        </connector>
                    </connectors>
                </configuration>
            </plugin>
        </plugins>
    </build>

  

实体 

package com.sishuok.entity;

import java.io.Serializable;

/**
 * <p>User: Zhang Kaitao
 * <p>Date: 13-12-19
 * <p>Version: 1.0
 */
public class User implements Serializable {
    private Long id;
    private String name;

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;

        User user = (User) o;

        if (id != null ? !id.equals(user.id) : user.id != null) return false;

        return true;
    }

    @Override
    public int hashCode() {
        return id != null ? id.hashCode() : 0;
    }
}

 

控制器

package com.sishuok.controller;

import com.sishuok.entity.User;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;

/**
 * <p>User: Zhang Kaitao
 * <p>Date: 13-12-19
 * <p>Version: 1.0
 */
@RestController
@RequestMapping("/user")
public class UserController {

    @RequestMapping(value = "/{id}", method = RequestMethod.GET)
    public User view(@PathVariable("id") Long id) {
        User user = new User();
        user.setId(id);
        user.setName("zhang");
        return user;
    }
}

具体就不多介绍了,请参考:《Spring4新特性——Web开发的增强》和《跟我学SpringMVC 》。

 

 

SpringMVC注解风格配置

@Configuration
@EnableWebMvc
@ComponentScan
public class AppConfig {
}

具体含义请参考《Spring4新特性——Groovy Bean定义DSL》部分。

 

Servlet3容器启动初始化器

在Servlet容器启动时编程式注册Servlet

package com.sishuok;

import org.springframework.web.WebApplicationInitializer;
import org.springframework.web.context.WebApplicationContext;
import org.springframework.web.context.support.AnnotationConfigWebApplicationContext;
import org.springframework.web.servlet.DispatcherServlet;

import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.ServletRegistration;

/**
 * <p>User: Zhang Kaitao
 * <p>Date: 13-12-19
 * <p>Version: 1.0
 */
public class AppInitializer implements WebApplicationInitializer {

    @Override
    public void onStartup(ServletContext servletContext) throws ServletException {
        AnnotationConfigWebApplicationContext webApplicationContext =
                new AnnotationConfigWebApplicationContext();
        webApplicationContext.register(AppConfig.class);


        DispatcherServlet dispatcherServlet = new DispatcherServlet(webApplicationContext);
        ServletRegistration.Dynamic dynamic = servletContext.addServlet("dispatcherServlet", dispatcherServlet);
        dynamic.addMapping("/");

    }
} 

具体含义请参考《跟我学Spring3》的第12章 和《Spring4新特性——Groovy Bean定义DSL》和我的github中的《servlet3-showcase》部分。 

 

然后运行 mvn jetty:run运行即可,浏览器输入如下地址即可得到我们的json数据。

http://localhost:9080/springmvc/user/1

 

参考示例的github地址:springmvc-rest-helloworld

 

非常简单的一个Rest风格的web应用就搭建完了,接下来再完善即可。

 

下一篇将介绍使用Spring Boot 2分钟构建spring mvc REST风格HelloWorld。

 

 

AngularJS入门教程之Helloworld示例

AngularJS入门教程之Helloworld示例

本文实例讲述了AngularJS入门教程之Helloworld示例。分享给大家供大家参考,具体如下:

什么是AngularJs?

angularjs是一个为动态WEB应用设计的结构框架。它能让你使用HTML作为模板语言,通过扩展HTML的语法,让你能更清楚、简洁地构建你的应用组件。它的创新点在于,利用数据绑定和依赖注入,它使你不用再写大量的代码了。这些全都通过浏览器端的javascript实现,这也使得它能够完美地和任何服务器技术结合。

AngularJS简单的Helloworld例子:

rush:js;"> <Meta charset="UTF-8"> AngularJS例子

Hello {{name}}

这个例子其实展示了angularjs的数据双向绑定,

左边为数据单向绑定图解,通常是要你管jquery,backbone这类框架,右边为angularjs数据双向绑定。

模型 视图 控制器(MVC)

MVC背后的核心概念就是,你在你的代码之间明确分离管理数据(模型),应用程序逻辑(控制器),并将数据给用户(视图)。

视图从模型中获取数据展示给用户。当用户通过点击或者输入和应用程序进行交互时,控制器通过改变模型中的数据响应。最终,模型层通知视图层,已经发生改变,一边更新显示。

在Angluar应用中,视图层就是DOM,控制器就是Javascript类,模型数据存储在对象属性中。

angularjs数据绑定

像jquery库这种扩展到客户端的模式,让我们遵循相似的风格,但由于更新的能力,单独地DOM的部分,而不是更新整个页面。这里,我们合并HTML字符串和数据,然后通过元素上设置innerHTML将结构插入到我们想要的Dom中。

这一切都运行的相当好,但是你想将新数据插入到界面,或者改变基于用户输入的数据时,你需要做很多又不是价值不高的工作,来确保同时在界面和javascript属性中获取的数据正常的状态。

但是,倘若我们有什么东西把这些工作都为我们做好了,同时不需要写代码?倘若我能仅仅声明界面的某一部分映射到javascript的属性,让他们自动的同步?这种编程方式叫做数据绑定。我们在angular中包括这种功能,因为当编写视图和模型时,使用mvc来消除代码那是非常棒的。移动数据从一个地方的绝大部分自动发生。

注:最上面的例子就能体现

依赖注入(DI)

$scope对象把数据绑定自动的传递给了我们。我们没有必要通过调用任何函数来创建它。我们只是要求把它放到HelloController构造函数中。

在后续学习中,我们发现,scope并不是我们唯一需要的。如果我们需要数据绑定它到用户浏览器指定的URL地址中,我们需要在构造函数中,添加一个scope并不是我们唯一需要的。如果我们需要数据绑定它到用户浏览器指定的URL地址中,我们需要在构造函数中,添加一个location对象,就这样:

rush:js;"> function HelloController($scope,$location){ $scope.greeting={text:'Hello'} //使用$location 在这 }

通过Angular的依赖注入系统,我们可以得到这种效果。依赖注入允许我们遵循一种开发风格,这种开发风格中,不是创建依赖,我们的类仅仅添加他们需要的。

这个遵循了一个叫迪米特法则的设计模式,也被称作最少知识法则。由于HelloController的任务是建立greeting模型的初始值,这种模式就是说,它不需要担心像$scope如何创建以及在那里找到它。

angularJs指令

angular最优秀部分之一是你可以把你写的模板当成HTML。因为在框架的核心层,我们已经包括了一个强大的DOM转换引擎,可以让你扩展HTML语法,因此你才可以这样做。

我们已经在模板文件中看到了多个新的属性,这些并不是HTML规范的一部分。示例中包括两个大括号是用来数据绑定的,ng-controller是用来指定那个控制器来服务那个师徒,ng-model将一个输入框绑定到模型部分。我们称这些叫HTML扩展指令。

angular带有很多标识符,帮助你为你的应用程序定义视图。这些标识符可以定义我们常见的视图作为模板。它们可以说明应用程序如何工作的或者创建可重复使用的组件。

同时不局限于Angular自带的标识符。你可以写你自己的来扩展HTML模板,做任何你想做的事。

更多关于AngularJS相关内容感兴趣的读者可查看本站专题:《》及《》

希望本文所述对大家AngularJS程序设计有所帮助。

c – 预链接错误:prelink-cross:简单的hello world示例

我正在尝试 cross-prelink一个简单的hello world程序.我使用交叉编译工具链arm-2012.03-57-arm-none-linux-gnueabi-i686-pc-linux-gnu,我不确定我是否使用了prelink-cross选项correclty.如果有人能指出我正确的方向,我会很高兴的.有关 github源代码的更多详细信息.谢谢.

项目目录树

|-arm-2012.03/
  |...
|-src/
  |-main.cpp
|-bin/
  |-hello
|-prelink_arm.conf

main.cpp中

#include <stdio.h>
int main (int argc,char *argv[])
{
    fprintf(stdout,"hello world\n");
    return 0;
}

prelink_arm.conf

-l arm-2012.03/arm-none-linux-gnueabi/libc/lib 
-h arm-2012.03/arm-none-linux-gnueabi/libc/lib 
-l arm-2012.03/arm-none-linux-gnueabi/libc/usr/lib
-h arm-2012.03/arm-none-linux-gnueabi/libc/usr/lib

编译

arm-2012.03/bin/arm-none-linux-gnueabi-gcc -Wall -o bin_arm/hello src/main.cpp

预链接

PATH=/usr/local/sbin prelink --verbose --cache-file=cache/prelink_arm.cache --config-file=prelink_arm.conf --ld-library-path="arm-2012.03/arm-none-linux-gnueabi/libc/lib;arm-2012.03/arm-none-linux-gnueabi/libc/usr/lib;" -h bin_arm/hello

错误信息

prelink: arm-2012.03/arm-none-linux-gnueabi/libc/usr/lib/bin/getent: Could not parse `/usr/local/sbin//prelink-rtld: error while loading shared libraries: ld-linux.so.3'
prelink: arm-2012.03/arm-none-linux-gnueabi/libc/usr/lib/bin/POSIX_V6_ILP32_OFFBIG: Could not parse `/usr/local/sbin//prelink-rtld: error while loading shared libraries: ld-linux.so.3'
prelink: arm-2012.03/arm-none-linux-gnueabi/libc/usr/lib/bin/iconv: Could not parse `/usr/local/sbin//prelink-rtld: error while loading shared libraries: ld-linux.so.3'
prelink: arm-2012.03/arm-none-linux-gnueabi/libc/usr/lib/bin/sprof: Could not parse `/usr/local/sbin//prelink-rtld: error while loading shared libraries: ld-linux.so.3'
prelink: arm-2012.03/arm-none-linux-gnueabi/libc/usr/lib/bin/iconvconfig: Could not parse `/usr/local/sbin//prelink-rtld: error while loading shared libraries: ld-linux.so.3'
prelink: arm-2012.03/arm-none-linux-gnueabi/libc/usr/lib/bin/POSIX_V7_ILP32_OFF32: Could not parse `/usr/local/sbin//prelink-rtld: error while loading shared libraries: ld-linux.so.3'
prelink: arm-2012.03/arm-none-linux-gnueabi/libc/usr/lib/bin/zdump: Could not parse `/usr/local/sbin//prelink-rtld: error while loading shared libraries: ld-linux.so.3'
prelink: arm-2012.03/arm-none-linux-gnueabi/libc/usr/lib/bin/pcprofiledump: Could not parse `/usr/local/sbin//prelink-rtld: error while loading shared libraries: ld-linux.so.3'
prelink: arm-2012.03/arm-none-linux-gnueabi/libc/usr/lib/bin/gencat: Could not parse `/usr/local/sbin//prelink-rtld: error while loading shared libraries: ld-linux.so.3'
prelink: arm-2012.03/arm-none-linux-gnueabi/libc/usr/lib/bin/gdbserver: Could not parse `/usr/local/sbin//prelink-rtld: error while loading shared libraries: ld-linux.so.3'
prelink: arm-2012.03/arm-none-linux-gnueabi/libc/usr/lib/bin/pldd: Could not parse `/usr/local/sbin//prelink-rtld: error while loading shared libraries: ld-linux.so.3'
prelink: arm-2012.03/arm-none-linux-gnueabi/libc/usr/lib/bin/locale: Could not parse `/usr/local/sbin//prelink-rtld: error while loading shared libraries: ld-linux.so.3'
prelink: arm-2012.03/arm-none-linux-gnueabi/libc/usr/lib/bin/localedef: Could not parse `/usr/local/sbin//prelink-rtld: error while loading shared libraries: ld-linux.so.3'
prelink: arm-2012.03/arm-none-linux-gnueabi/libc/usr/lib/bin/XBS5_ILP32_OFFBIG: Could not parse `/usr/local/sbin//prelink-rtld: error while loading shared libraries: ld-linux.so.3'
prelink: arm-2012.03/arm-none-linux-gnueabi/libc/usr/lib/bin/zic: Could not parse `/usr/local/sbin//prelink-rtld: error while loading shared libraries: ld-linux.so.3'
prelink: arm-2012.03/arm-none-linux-gnueabi/libc/usr/lib/bin/POSIX_V7_ILP32_OFFBIG: Could not parse `/usr/local/sbin//prelink-rtld: error while loading shared libraries: ld-linux.so.3'
prelink: arm-2012.03/arm-none-linux-gnueabi/libc/usr/lib/bin/rpcgen: Could not parse `/usr/local/sbin//prelink-rtld: error while loading shared libraries: ld-linux.so.3'
prelink: arm-2012.03/arm-none-linux-gnueabi/libc/usr/lib/bin/makedb: Could not parse `/usr/local/sbin//prelink-rtld: error while loading shared libraries: ld-linux.so.3'
prelink: arm-2012.03/arm-none-linux-gnueabi/libc/usr/lib/bin/getconf: Could not parse `/usr/local/sbin//prelink-rtld: error while loading shared libraries: ld-linux.so.3'
prelink: arm-2012.03/arm-none-linux-gnueabi/libc/usr/lib/bin/XBS5_ILP32_OFF32: Could not parse `/usr/local/sbin//prelink-rtld: error while loading shared libraries: ld-linux.so.3'
prelink: arm-2012.03/arm-none-linux-gnueabi/libc/usr/lib/bin/POSIX_V6_ILP32_OFF32: Could not parse `/usr/local/sbin//prelink-rtld: error while loading shared libraries: ld-linux.so.3'
prelink: bin_arm/hello: Could not parse `/usr/local/sbin//prelink-rtld: error while loading shared libraries: ld-linux.so.3'

如果我将可执行文件所依赖的所有库提取到一个单独的文件夹并相应地设置链接,那么我仍然会收到以下错误:

prelink: bin_arm/hello: Could not parse `/usr/local/sbin//prelink-rtld: error while loading shared libraries: ld-linux.so.3'

解决方法

是的,我找到了解决方案:

我必须指定sysroot并明确告诉prelink要预编译哪些库.

目录结构现在看起来像这样:

|- arm-2012.03/arm-none-linux-gnueabi/libc/usr/local/bin/hello
  \- /arm-none-linux-gnueabi
    \- libc
      \- lib
        \- libc-2.15.so
        |- libgcc_s.so.1
        |- ld-2.15.so
        |- ...
      |- usr
        \- local
          \- bin
            \- hello
      |- etc
        \- prelink.conf
|- Makefile

prelink.conf

-l /libc/lib
-h /libc/lib

这是prelink命令:

PATH=/usr/local/sbin prelink --verbose --root=arm-2012.03/arm-none-linux-gnueabi/libc/ --cache-file=/etc/cache/prelink.cache --config-file=/etc/prelink.conf --ld-library-path="/lib;" -h /usr/local/bin/hello /lib/libc-2.15.so /lib/libgcc_s.so.1 /lib/ld-2.15.so

源代码可以在github上找到,请务必签出两个分支’master’和’shared-library’:https://github.com/fnbk/prelink-cross-example

关于有关Spring web.xml的一些信息 和 标签参考Hello World示例的问题我们已经讲解完毕,感谢您的阅读,如果还想了解更多关于1. Spring 5 MVC 的 HelloWorld、5分钟构建spring web mvc REST风格HelloWorld、AngularJS入门教程之Helloworld示例、c – 预链接错误:prelink-cross:简单的hello world示例等相关内容,可以在本站寻找。

本文标签:

上一篇spring工厂方法和factory bean有什么区别?(spring beanfactory与factorybean)

下一篇用RequestMappingHandlerAdapter问题替换AnnotationMethodHandlerAdapter问题