macOS和linux之间编译器的区别?

时间:2015-10-15 05:36:52

标签: c linux

我现在正在学习c语言,每次我们必须通过ssh登录并远程执行命令时,我的学校将所有作业都放在神话上。 因此,我想下载文件并在我自己的macbook上执行它们。但是,当我使用make命令编译文件时,我收到错误和警告,例如:

gcc -g -O0 -std=gnu99 -Wall $warnflags -m32   -c -I. vectest.c -o vectest.o
warning: unknown warning option '-Wlogical-op'; did you mean '-Wlong-long'?

vectest.c:10:10: fatal error: 'error.h' file not found
#include <error.h>”
我搜索了这些问题,但找不到满意的答案。谁能帮我解决这个问题?或者我必须使用linux机器?

2 个答案:

答案 0 :(得分:2)

实际上;各种平台的编译器(即使它是&#34;相同的#34;编译器,如GCC)可能有不同的标志和行为。您可以使其工作 - 您可以从-Wlogical-op中的$warnflags删除Makefile标记,但如果error.h文件是系统提供的头文件,你可能遇到麻烦了。因此,我建议您下载例如VirtualBox并在其上运行Linux。

答案 1 :(得分:1)

有关此标头提供的内容,请参阅error(3)。它不是特定于linux而是特定于 GNU C库。你可以做的是提供你自己的这些功能的最小实现,并编写自己的enter code here import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.io.PrintWriter; import java.sql.Connection; import java.sql.DriverManager; import java.text.SimpleDateFormat; import java.util.Date; import java.util.HashMap; import java.util.logging.Level; import java.util.logging.Logger; import javax.servlet.ServletContext; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import net.sf.jasperreports.engine.JasperCompileManager; import net.sf.jasperreports.engine.JasperExportManager; import net.sf.jasperreports.engine.JasperFillManager; import net.sf.jasperreports.engine.JasperPrint; import net.sf.jasperreports.engine.JasperReport; import net.sf.jasperreports.view.JasperViewer; public class test extends HttpServlet { protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=UTF-8"); try (PrintWriter out = response.getWriter()) { /* TODO output your page here. You may use following sample code. */ out.println("<!DOCTYPE html>"); out.println("<html>"); out.println("<head>"); out.println("<title>Servlet test</title>"); out.println("</head>"); out.println("<body>"); out.println("<h1>Servlet test at " + request.getContextPath() + " </h1>"); out.println("</body>"); out.println("</html>"); response.setHeader("Content-Disposition", "inline; filename=\"print.pdf\""); response.setContentType("application/pdf"); String host = "jdbc:mysql://localhost:3306/youare"; String uname = "root"; String upass = ""; String user = request.getParameter("rollnum"); String userdob = request.getParameter("date_of_birth"); try { Class.forName("com.mysql.jdbc.Driver"); Connection con = DriverManager.getConnection(host, uname, upass); // an example date with format MM-dd-yyyy String newDateString; SimpleDateFormat sdf = new SimpleDateFormat("YYYY_MM_DD_DASH"); Date d = (Date) sdf.parse(userdob); // exactly after here is useful for you sdf.applyPattern("YYYY_MM_DD_DASH"); newDateString = sdf.format(d); HashMap map = new HashMap(); map.put("Regno",user); map.put("dob",newDateString); ServletContext context = request.getServletContext(); String report = context.getRealPath("/report.jrxml"); InputStream input=new FileInputStream(new File(report)); JasperReport jr= JasperCompileManager.compileReport(input); JasperPrint jasperPrint = JasperFillManager.fillReport(jr,map,con); //JasperExportManager.exportReportToPdfFile(jasperPrint,"print.pdf"); JasperExportManager.exportReportToPdfStream(jasperPrint, response.getOutputStream ()); response.getOutputStream().flush(); response.getOutputStream().close(); JasperViewer.viewReport(jasperPrint); con.close(); } catch (Exception ex) { Logger.getLogger(test.class.getName()).log(Level.SEVERE, null, ex); } } }

你甚至可以“#define”他们什么也不做,但是你可能会在现有代码中丢失一些错误报告。也许您可以尝试找一位老师理解问题并讨论问题......最好不要使用任何特定于平台的扩展来学习标准C

相关问题