小编Vic*_*MdB的帖子

"未定义的引用"链接目标文件时出错

我意识到这个问题已经通过多种方式提出,包括这个非常全面的答案,但我看了很多,并尝试修复我的错误无济于事.

我正在使用.cpp和.c文件来创建程序.我使用g ++编译了所有文件,它似乎没有更多的链接错误,尽管它给了我一堆与C语法相关的C++错误.这是我使用的命令:

g++ -o program main.cpp /data/*.c -l[...libs]
Run Code Online (Sandbox Code Playgroud)

main.cpp调用.c文件中的函数.然后我明白不应该尝试用一个编译器编译.c和.cpp文件,而是使用gcc作为一个,g ++用于另一个,然后简单地链接目标文件.

所以我做了这个(.c文件是库的一部分,已经有.o文件)

g++ -c main.cpp
g++ -o program main.o /data/*.o -l[..libs]
Run Code Online (Sandbox Code Playgroud)

但是接下来我将从main.cpp调用到预编译的.c文件的函数中获得"未定义的引用"错误,这是我以前没有得到的错误.

有人可以帮忙吗?或者我可能需要提供更多信息?

编辑(更深入的代码摘录,我试图简化否则这将无法阅读,但让我知道如果我仍然需要添加东西,我会尝试删除不必要的代码):

main.cpp:

#include "header.h"

int main(int argc, char** argv) {
    string s1 = argv[2];
    fn1(s1)
}
Run Code Online (Sandbox Code Playgroud)

header.h

void fn1(string s1)
Run Code Online (Sandbox Code Playgroud)

mycfile.c

#include "header.h"

void fn1(string s1){
    fprintf(stdout, " you entered %s", s1);
    fflush(stdout);
}
Run Code Online (Sandbox Code Playgroud)

回答:

@Smeehey帮助我弄清楚了解决方案,实际上我仍然在我正在使用的.hpp文件中包含旧标题.但核心解决方案确实是使用外部C {}.

c c++ linker gcc g++

7
推荐指数
1
解决办法
2万
查看次数

使用Docker更新Container的环境变量

我已经设置了一个带有多个docker容器的服务器,可以通过jwilders nginx reversre proxy访问.运行容器时,可以设置VIRTUAL_HOST环境变量.我一直试图找出一种在容器启动后更新这些内容的方法.

这里发布的解决方案:

您只需停止docker守护程序并更改容器配置

/var/lib/docker/containers/[container-id]/config.json

需要你停止docker守护进程,但我宁愿不必诉诸于此.

另一个在这里,使用docker commit来保存实例信息:

话虽如此,您可以通过将其作为新图像提交来保存容器中的文件系统更改;

$ docker run -it --name=foobar alpine sh
$ docker commit foobar mynewimage
$ docker rm foobar
$ docker run -it --name=foobar mynewimage sh
Run Code Online (Sandbox Code Playgroud)

虽然这对于改变环境变量似乎也有点过头了.

我查看了docker update,但这主要是为了重新配置容器资源.

当然,如果我没有其他选择,我将使用上述任何一种方法,但我想知道是否有人找到了其他解决方案?

environment-variables docker

4
推荐指数
1
解决办法
2万
查看次数

标签 统计

c ×1

c++ ×1

docker ×1

environment-variables ×1

g++ ×1

gcc ×1

linker ×1