1

首先,我知道这被问了一千次。但是我打开了一些,每个人都忘记了编译/链接它。无论如何,我在带有标题和文件的单独文件中创建了一个链接列表,它工作正常,但是我尝试向它添加一个新函数,但后来我对“函数”有未定义的引用。这是来源:

列表.c

#include "list.h"

struct node
{
    item_t x;
    struct node *next;    
};
struct node* root;

//Window hider extension
void ToggleVisibleList(HWND currentHwnd)
{
    if (root == 0)
        return;

    struct node *conductor = root;
    while (conductor != 0)
    {
        HWND hwnd = (HWND)conductor->x;
        ShowWindow(hwnd, IsWindowVisible(hwnd) ? SW_HIDE : SW_SHOW);

        conductor = conductor->next;
    }    

    ShowWindow(currentHwnd, IsWindowVisible(currentHwnd) ? SW_HIDE : SW_SHOW);
}

//...Rest of the file

列表.h

#ifndef LIST_H
#define LIST_H

#include <stdlib.h>
#include <windows.h>

//Window hider extension
void ToggleVisibleList(HWND currentHwnd);

//.. rest of the header

主程序

#include <windows.h>
#include <stdio.h>
#include <commctrl.h>

#include "list.h"

HWND currentHwnd;

//..

HHOOK hookKeyboard;
LRESULT CALLBACK LowLevelKeyboardProc(int nCode, WPARAM wParam, LPARAM lParam)
{
    if (nCode >= 0)
    {
        if (wParam == WM_KEYDOWN)
        {
            KBDLLHOOKSTRUCT* hookStruct = (KBDLLHOOKSTRUCT*)lParam;
            if (hookStruct->vkCode == 'Z' && GetAsyncKeyState(VK_LCONTROL))
            {
                ToggleVisibleList(currentHwnd);
            }
        }
    }

    CallNextHookEx(hookKeyboard, nCode, wParam, lParam);
}

//..Rest of file

我使用 Mingw 编译(操作系统:Windows 8 64 位):

gcc -o hider.exe main.c list.c -mwindows

C:\Users\...\AppData\Local\Temp\cc6sCa17.o:main.c:(.text+0x4bc): undefined reference to `ToggleVisibleList'
collect2: ld gaf exit-status 1 terug
//Translation: ld return exit-status 1

编辑:尝试交换文件顺序。

我希望我没有重复一个问题,我不这么认为,因为我首先尝试了 20 个问题。(和谷歌。)问候

答:重新启动我的计算机并编译。

4

1 回答 1

0

黑暗中的总射击答案:

我怀疑这可能有效(按编译顺序交换 list.c 和 main.c)

gcc -o hider.exe list.c main.c -mwindows

我建议这样做是因为与库的链接与 gcc 具有相似的行为。但是我从来没有观察到文件顺序的这个问题。

从 gcc 手册页(关于-l library

在命令中编写此选项的位置有所不同;链接器按照指定的顺序搜索和处理库和目标文件。因此,foo.o -lz bar.o 在文件 foo.o 之后但在 bar.o 之前搜索库 z。如果 bar.o 引用 z 中的函数,则可能不会加载这些函数。

于 2013-01-06T13:08:39.623 回答