注册 登录
编程论坛 C++教室

g++ 编译.o目标文件出错,不知什么原因?

sharplong 发布于 2017-10-31 18:20, 3261 次点击
say.h
程序代码:
#include <iostream>
void sayhello(void);
class Say
{
        private:
                char * string;
        public:
                Say( char *  str)
                {
                        string  = str;
                }
                void sayThis(const char * str)
                {
                        std::cout << str << "from a static library\n";
                }
                void sayString(void);
};
~                                                                                         
~                                                                                         
~      


-----------------------------------------
say.cpp
程序代码:

#include "say.h"
void Say::sayString()
{
        std::cout << string << "\n";
}

Say librarysay("library instance of Say");
~                                                                                         
~                                                


--------------------------------------------
sayhello.cpp
程序代码:
#include "say.h"
void sayhello()
{
        std::cout << "hello from a static library\n";
}

+++++++++++++++++++++++++++++++++++++++++++++
以下是报错:

Ubuntu 环境 g++

-virtual-machine:~/桌面/CLearning$ g++ say.cpp
say.cpp:7:41: warning: ISO C++ forbids converting a string constant to ‘char*’ [-Wwrite-strings]
 Say librarysay("library instance of Say");
                                         ^
/usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu/Scrt1.o:在函数‘_start’中:
(.text+0x20):对‘main’未定义的引用


我想把 say.cpp 和 sayhello.cpp编译成目标文件,然后做成静态库,可是一编译就报错了,新手不知什么原因??
4 回复
#2
rjsp2017-10-31 18:49
说得很清楚呀,"library instance of Say"这个字符串常量不可以隐式自然地转化为char*类型
#3
sharplong2017-10-31 19:40
回复 2楼 rjsp
-virtual-machine:~/桌面/CLearning$ g++ say.cpp
/usr/lib/gcc/x86_64-linux-gnu/7/../../../x86_64-linux-gnu/Scrt1.o:在函数‘_start’中:
(.text+0x20):对‘main’未定义的引用
collect2: error: ld returned 1 exit status

不是啊,主要是下面那个错误,main没有定义
#4
rjsp2017-11-01 08:33
如果与你的问题没关系,那你贴它出来干什么?故意捣乱?
你应该删掉一切无关的东西,包括代码,然后这么问:
g++ say.cpp 编译时报main函数不存在,可能我却只想将之编译成目标文件,而不需要link成可执行文件。请问怎么办?

这样别人就知道你到底要干什么,然后告诉你命令行是 g++ -c say.cpp
#5
sharplong2017-11-02 14:15
回复 4楼 rjsp
谢谢回答。
1