Xcode编译错误 - ld:找不到架构armv7的符号

时间:2012-08-04 00:27:49

标签: xcode serial-port symbols

我最近将文件Serial.cSerial.h添加到了我的Xcode项目中。

Serial.c的代码如下,

#include <stdio.h>   /* Standard input/output definitions */
#include <stdlib.h>
#include <string.h>  /* String function definitions */
#include <unistd.h>  /* UNIX standard function definitions */
#include <fcntl.h>   /* File control definitions */
#include <errno.h>   /* Error number definitions */
#include <termios.h> /* POSIX terminal control definitions */

/*
* 'open_port()' - Open serial port on dock connector pins 13RX / 12TX
*
* Returns the file descriptor on success or -1 on error.
*/

int open_port(void)
{
int fd = -1; /* File descriptor for the port */

struct termios options; 

fd = open("/dev/tty.iap", O_RDWR | O_NOCTTY | O_NDELAY); // O_NOCTTY - don't be controlling terminal, O_NODELAY don't care about DCD signal state
if ( fd == -1)
{
    // couldn't open the port

    perror("open_port: Unable to open /dev/tty.iap - ");
}
else
    fcntl(fd, F_SETFL, 0);

tcgetattr(fd, &options); // get current options for the port

// set the baud rate
cfsetispeed(&options, B2400);
cfsetospeed(&options, B2400);

// enable the receiver and set local mode
options.c_cflag |= (CLOCAL | CREAD);

// set the new options for the port
tcsetattr(fd, TCSANOW, &options);

return (fd);

}

serial.h个文件,

NSInteger openPort();

我试图将来自iPhone的串行RX数据流的输出转换为NSLog语句。

我在OpenPort文件中调用ViewControllerSerialConsole.m函数

- (void)viewDidLoad
{
 [super viewDidLoad];
// Do any additional setup after loading the view.


#if !TARGET_IPHONE_SIMULATOR    
NSInteger serial = openPort();
NSLog(@"The serial data is %d",serial);
//_serialView.text = serial;
#endif
}

该程序在iPhone模拟器上编译正常,但不能在iPhone上编译。

我收到以下错误消息,

架构armv7的未定义符号:   “_openPort”,引自:        - ViewControllerSerialConsole.o中的[ViewControllerSerialConsole viewDidLoad] ld:找不到架构armv7的符号 clang:错误:链接器命令失败,退出代码为1(使用-v查看调用)

ld:找不到架构armv7的符号

任何有关解决此问题的帮助都将不胜感激。

1 个答案:

答案 0 :(得分:5)

您的应用程序可以很好地为模拟器编译,因为您没有提到丢失的“open_port”或“openPort”符号**。

在Xcode项目中,选择文件列表中的“Serial.m”文件(沿工作区的左边缘),然后查看该文件的文件检查器。

确保“目标会员”设置中的项目的复选框为 ON

Make sure Target Membership is selected for your .m file

**当我们讨论这个主题时,你的函数是否在你的Serial.m和amp;之间正确命名。 Serial.h文件?我在一个中看到“open_port”,在另一个中看到“openPort”。