我正在尝试在我的mac osx leopard机器上编译一个预先存在的c ++包,并收到以下错误:
error: no matching function for call to 'getline(char**, size_t*, FILE*&)'
这可能是因为getline()是GNU特定的扩展.
我可以以某种方式使osx默认g ++编译器识别这样的GNU特定扩展吗?
(如果没有,我总是可以提供我自己的实现或GNU原始实现,但我更愿意有一个"更清洁"的解决方案,如果可能的话)
我用GNU g ++构建并编译了一个命令行程序,它出于多种原因"溢出"堆栈,主要是深度继承,创建了大量对象等等.所以我在Mac OS X上遵循这个解决方法来解决链接时的问题:
-Wl,-stack_size,0x10000000,-stack_addr,0xc0000000
Run Code Online (Sandbox Code Playgroud)
在Linux下,我只是尝试过ulimit -s unlimited; 以这种方式运行程序不再产生分段错误
但是当尝试使用GNU g ++在Windows上编译它时,编译器无法识别
-Wl,-stack_size,0x10000000,-stack_addr,0xc0000000
Run Code Online (Sandbox Code Playgroud)
您还可以使用哪种其他选项作为问题的解决方法?
提前致谢
我在运行程序的arm设备上有一个嵌入式gnu/linux,我可以telnet它.我想知道程序如何向设备发送命令,这样我就可以创建自己的程序来发送这些命令,但是当我想要它时.我很确定它会写入某些内容/dev.
我怎么知道/dev程序正在写入哪个文件(我知道它不是真正的文件)以及什么?
参考其在armv5tejl芯片上的2.6.27.47内核.我也有它的工具链,所以我可以编译程序.
我试图移植一个库在iPhone上运行,它使用内存映射和一堆其他东西.我注意到还有一些#defines缺失(O_RDONLY),应该在其中定义<fcntl.h>.
在调查崩溃时,我遇到了以下代码片段,并立即发现该mov指令实际上应该是movq为了获得正确的64位寄存器操作.
#elif defined(__x86_64__)
unsigned long rbp;
__asm__ volatile ("mov %%rbp, %0" : "=r" (rbp));
sp = (void **) rbp;
#else
Run Code Online (Sandbox Code Playgroud)
除此之外,我还发现文档声称rbpx86-64 的寄存器是通用的,不包含当前帧的地址.我还发现了声称rbp包含当前帧地址的文档.有人可以澄清吗?
我在Cygwin中使用gcc(在Windows7-64位中)运行此示例 http://asm.sourceforge.net/howto/build.html
.data # section declaration
msg:
.ascii "Hello, world!\n" # our dear string
len = .-msg # length of our dear string
.text # section declaration
# we must export the entry point to the ELF linker or
.global _start # loader. They conventionally recognize _start as their
# entry point. Use ld -e foo to override the default.
_start:
# write our string to stdout
movl $len,%edx # third argument: message length
movl $msg,%ecx # second argument: pointer …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用autotools(autoconf,automake,libtool)创建一个库作为构建系统.该库必须是可交叉编译的,但构建它的步骤之一是通过在整个过程中从源构建的可执行文件生成源.
问题是我不能使用automake的系统来构建中间二进制文件,因为当它交叉编译时,它不会在'--build'上运行来生成源代码.
解决这个问题的一种方法是创建单独的autools项目来构建中间二进制文件,但我想避免它,因为有许多标题和其他"数据"文件对于中间可执行文件和最终库是常见的,所以我想将它保存在一个地方,除了那些中间二进制文件应该是"noinst".
有没有其他方法可以使其正常工作并保持可移植性?我试图使用ax_prog_cxx_for_build,但在交叉编译时我找不到--build的EXEEXT.
这是一个问题的例子,只是为了说明我的问题:
# -*- Autoconf -*-
# Process this file with autoconf to produce a configure script.
AC_PREREQ([2.68])
AC_INIT([libfoobar], [0.1.0], [<NOBUGS>])
AM_INIT_AUTOMAKE([foreign])
LT_INIT
AC_CONFIG_SRCDIR([src/bar.cpp])
AC_CONFIG_HEADERS([config.h])
AC_CONFIG_MACRO_DIR([m4])
AC_CONFIG_FILES([Makefile
src/Makefile])
# Checks for programs.
AC_PROG_CXX
# Checks for libraries.
# Checks for header files.
# Checks for typedefs, structures, and compiler characteristics.
# Checks for library functions.
AC_OUTPUT
Run Code Online (Sandbox Code Playgroud)
ACLOCAL_AMFLAGS = -I m4
SUBDIRS = src
Run Code Online (Sandbox Code Playgroud)
bin_PROGRAMS = bar
lib_LTLIBRARIES = libfoo.la
noinst_bar_SOURCES = bar.cpp …Run Code Online (Sandbox Code Playgroud) 我正在使用GNU C库提供的hsearch_r函数.
我看到虽然我可以使用hsearch_r将元素添加到HASH表中并将操作作为ENTER传递,但是我看不到从HASH表中删除元素或条目的方法.
有人知道为什么会这样吗?
我可以执行以下操作来实现删除功能.
我首先使用hsearch_r搜索它,操作为FIND.然后,一旦我得到一个指向hash_element的指针,然后我释放它.那会有用吗?如果我只能添加元素并搜索它们,那么哈希库有什么用处.为什么不提供删除例程?
我试着谷歌搜索hsearch库的源代码,无法找到它.有人也可以指出我吗?
http://linux.die.net/man/3/hcreate_r
编辑:
我也看到,如果我用动作ADD调用hsearch_r两次,那么它既不会抛出错误,也不会使用新值更新散列.这很奇怪.这意味着内部hsearch不实现替换功能,我们必须自己完成,即首先进行搜索,然后如果存在,则删除第一个条目,然后添加一个新条目.但是要做到这一点,我们需要从哈希中删除一个元素,我无法做到.
我正在尝试创建一个尽可能少的命令重复的makefile.基本思想是在目标上分配变量名称,如下所示:
CC = gcc
CFLAGS = -std=c99 -pedantic-errors -Wall
some_target:
P = some_target
some_other_target:
P = some_other_target
...
#common compilation command
$(CC) $(CFLAGS) $(P).c -o $(P).o
Run Code Online (Sandbox Code Playgroud)
因此,只有一个编译命令接收变量P,这对每个目标都是唯一的.显然上面的例子不起作用,我需要改变什么才能使其正确?
长话短说,把我的问题缩小到一线:
for a in {a..z}; do echo "-$a" | grep "\-$a"; done
打印所有字母,但 -e和-n。
看起来像Linux版本,bash版本,grep(-P,-E)的标志等等都没有关系!
经过测试的环境:
为什么不-e和-n打印?
(删除代码中的破折号也可以解决此问题)